도대체 배열을 통해서 리스트를 만드는 것은 어떻게 하는 것일까요?
데이터를 추가하면 있던 데이터는 뒤로 밀리는 내부 메커니즘을 가져요 데이터 역시 삭제되어 인덱스를 채우기 위해 앞또는 뒤의 데이터들을 모두 한칸씩 일일히 이동시켜주어야 해요.:)
배열을 이용한 리스트 ArrayList는 인덱스를 이용해서 값을 가져오는 데 상당히 빠릅니다.
Size 를 통해서 몇개의 인덱스가 Arraylist가
생성
import java.util.ArrayList;
import java.util.Iterator;
//생성
ArrayList<integer> numbers = new ArrayList<>();
// 추가
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
// 1번 인덱스에 50을 추가
numbers.add(1,50);
numbers.remove(2);
//get index2
numbers.get(2);
// index의 개수
nubers.size();
//Iterator라는 데이터 타입은 자바의 인터페이스!
//numbers라는 객체의 메소드인 Iterator를 호출하여서 iterator타입의 변수 it에 담는다.
Iterator it = numbers.iterator();
while(it.hasNext()){
int value = (int)it.next();
if(value == 30){
it.romove();
}
}
//numbers안에 값이 순차적으로 value의 값에 담는다.
for(int value : numbers){
System.out.println(value);
}
for(int i = 0 ; i < number.size() ; i++){
Systeom.out.println(numbers.get(i));
}
public class ArrayList{
// 현재는 0개의 배열이 데이터에 있음.
private int size = 0 ;
// 오브젝트 타입의 객체를 비공개형식의 변수를 선언, 배열의 크기는 100
private Object[] elementData = new object[100];
}
package 생활코딩;
public class Arraylist {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addLast(Object element){
elementData[size] = element;
size++;
return true;
}
}
package 생활코딩;
public class Main {
public static void main (String args[]){
Arraylist numbers = new Arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addLast(40);
System.out.println(numbers);
}
}
반복문을 코드화 시키면
package 생활코딩;
public class Main {
public static void main (String args[]){
Arraylist numbers = new Arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addLast(40);
numbers.add(1,15);
}
}
package 생활코딩;
public class Arraylist {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addLast(Object element){
elementData[size] = element;
size++;
return true;
}
public boolean add(int index, Object element){
for( int i = size - 1 ; i >= index ; i--){
elementData[i + 1] = elementData[i];
}
elementData[index] = element ;
size ++;
return true;
}
}
addFirst는 인덱스 0번째에 add 해주는 것과 동일 하므로.
package 생활코딩;
public class Main {
public static void main (String args[]){
Arraylist numbers = new Arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addLast(40);
numbers.add(1,15);
numbers.addFirst(5);
}
}
package 생활코딩;
public class Arraylist {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addFirst(Object element){
return add(0, element);
}
public boolean addLast(Object element){
elementData[size] = element;
size++;
return true;
}
public boolean add(int index, Object element){
for( int i = size - 1 ; i >= index ; i--){
elementData[i + 1] = elementData[i];
}
elementData[index] = element ;
size ++;
return true;
}
}
자바의 toString 이라는 약속되어 있는 메소드를 이용하여 출력할 수 있어요.
package 생활코딩;
public class Main {
public static void main (String args[]){
Arraylist numbers = new Arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addLast(40);
numbers.add(1,15);
numbers.addFirst(5);
// 자바에서는 numbers 를 출력했을 때,toString 의 메소드 값이 출력 되도록 약속되어 있어요.
System.out.println(numbers);
}
}
//윗부분 소스는 동일
// toSring 메소드의 구현부에는 변수 str에 각각의 element를 반복문통해 담고 리턴
public String toString(){
String str = "[" ;
for(int i = 0; i < size ; i++){
str += elementData[i];
if ( i < size - 1){
str += ",";
}
}
return str + "]";
}
package 생활코딩;
public class Main {
public static void main (String args[]){
Arraylist numbers = new Arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addLast(40);
// 1번 인덱스 20을 삭제하는 remove method를 만들어 보아요.
numbers.remove(1);
System.out.println(numbers);
}
}
package 생활코딩;
public class Arraylist {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addFirst(Object element){
return add(0, element);
}
public boolean addLast(Object element){
elementData[size] = element;
size++;
return true;
}
public boolean add(int index, Object element){
for( int i = size - 1 ; i >= index ; i--){
elementData[i + 1] = elementData[i];
}
elementData[index] = element ;
size ++;
return true;
}
public String toString(){
String str = "[" ;
for(int i = 0; i < size ; i++){
str += elementData[i];
if ( i < size - 1){
str += ",";
}
}
return str + "]";
}
// get index for remove, and pull the very next index into former index we get til size -1
public Object remove(int index) {
// to return value removed
Object removed = elementData[index];
for (int i = index + 1; i <= size - 1; i++) {
elementData[i - 1] = elementData[i];
}
size --;
// get rid of last index, remaining one..
elementData[size] = null ;
return removed ;
}
}
출력값
[10,30,40]
package 생활코딩;
public class Arraylist {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addFirst(Object element){
return add(0, element);
}
public boolean addLast(Object element){
elementData[size] = element;
size++;
return true;
}
public boolean add(int index, Object element){
for( int i = size - 1 ; i >= index ; i--){
elementData[i + 1] = elementData[i];
}
elementData[index] = element ;
size ++;
return true;
}
public String toString(){
String str = "[" ;
for(int i = 0; i < size ; i++){
str += elementData[i];
if ( i < size - 1){
str += ",";
}
}
return str + "]";
}
public Object remove(int index) {
Object removed = elementData[index];
for (int i = index + 1; i <= size - 1; i++) {
elementData[i - 1] = elementData[i];
}
size --;
elementData[size] = null ;
return removed ;
}
// removeFirst() method returns remove(0) which delete index 0 value
public Object removeFirst(){
return remove(0);
}
// last value should be ArrayList(size - 1) cause Array list Started from Zero
// removeLast() method returns remove(size - 1) deleting last value
public Object removeLast(){
return remove(size - 1 );
}
}
package 생활코딩;
public class Main {
public static void main (String args[]){
Arraylist numbers = new Arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addLast(40);
numbers.removeFirst();
numbers.removeLast();
System.out.println(numbers);
}
}
output
[20,30]
package 생활코딩;
public class Arraylist {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addFirst(Object element){
return add(0, element);
}
public boolean addLast(Object element){
elementData[size] = element;
size++;
return true;
}
public boolean add(int index, Object element){
for( int i = size - 1 ; i >= index ; i--){
elementData[i + 1] = elementData[i];
}
elementData[index] = element ;
size ++;
return true;
}
public String toString(){
String str = "[" ;
for(int i = 0; i < size ; i++){
str += elementData[i];
if ( i < size - 1){
str += ",";
}
}
return str + "]";
}
public Object remove(int index) {
Object removed = elementData[index];
for (int i = index + 1; i <= size - 1; i++) {
elementData[i - 1] = elementData[i];
}
size --;
elementData[size] = null ;
return removed ;
}
public Object removeFirst(){
return remove(0);
}
public Object removeLast(){
return remove(size - 1 );
}
// to get index returns should be not index but elementdata!!
public Object get(int index){
return elementData[index];
}
}
package 생활코딩;
public class Main {
public static void main (String args[]){
Arraylist numbers = new Arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addLast(40);
// Arraylist Strength? you can touch with Arraylist through INDEX!
System.out.println( numbers.get(0));
System.out.println( numbers.get(1));
System.out.println( numbers.get(2));
System.out.println( numbers.get(3));
}
}
ouput
10
20
30
40