List<E> 인터페이스를 구현하는 제네릭 클래스들은 다음 두가지 특성을 공통으로 지닌다.
동일한 인스턴스의 중복 저장을 허용한다.
인스턴스의 저장 순서가 유지된다.
ArrayList<E>
배열은 크기를 한번 지정하면 그보다 많은 수의 값을 저장할 수 없다.
ArrayList는 크기를 미리 지정하지 않기 때문에 얼마든지 많은 수를 저장할 수 있다.
배열은 값의 개수를 구할때 .length를 사용하고 ArrayList 는 메소드 size 를 사용한다.
특정한 값을 가져올 때 배열은 [인덱스번호] 를 사용하고 컬렉션은 .get(인덱스번호)를 사용한다.
ArrayList<E>클래스는 배열과 상당히 유사하다 그러나 데이터의 저장을 위해서 인덱스 정보를
별도로 관리할 필요가 없고, 데이터의 삭제를 위한 추가적인 코드의 작성이 전혀 필요 없다.
저장되는 인스턴스의 수에 따라서 그 크기도 자동으로 늘어나기 때문에 배열과 달리 길이를 고민하지 않아도 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.ArrayList; public class CollectionTest { public static void main(String[] args){ ArrayList<Integer> list = new ArrayList<Integer>(); //데이터 저장 list.add(new Integer(11)); list.add(new Integer(222)); list.add(new Integer(333)); //데이터 참조 System.out.println("1차참조"); for(int i =0; i<list.size();i++){ System.out.println(list.get(i)); } //데이터 삭제 list.remove(0);//매개변수로 전달된 인덱스의 데이터 삭제 System.out.println("2차참조"); for(int i =0; i<list.size();i++){ System.out.println(list.size()); } } } | cs |
remove 메소드의 호출을 통해서 삭제가 이뤄진다. 전달되는 값에 해당하는 인스턴스 정보가
저장소인 ArrayList 의 인스턴스 내에서 지워지게 된다. 주의할 점은 인스턴스의 참조값이
지워지는 것 일뿐 인스턴스가 소멸하는것은 아니다.
LinkedList<E>
LinkedList<E> 클래스의 사용방법은 ArrayList<E> 의 사용방법과 거의 동일하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import java.util.LinkedList; public class CollectionTest { public static void main(String[] args){ LinkedList<Integer> list = new LinkedList<Integer>(); //데이터 저장 list.add(new Integer(111)); list.add(new Integer(222)); list.add(new Integer(333)); //데이터 참조 System.out.println("1차참조"); for(int i = 0; i<list.size();i++){ System.out.println(list.get(i)); } //데이터 삭제 list.remove(0); System.out.println("2차참조"); for(int i = 0; i<list.size();i++){ System.out.println(list.get(i)); } } } | cs |
ArrayList<E>와 LinkedList<E> 의 차이점
ArrayList<E> 와 LinkedList<E> 의 차이점은 사용방법의 차이가 아닌 인스턴스의 저장방식의 차이가있다.
데이터의 저장 참조 및 삭제 기능의 활용방법만 놓고 보면 ArrayList<E> 와 LinkedList<E> 에 차이는없다.
그러나 내부적으로 인스턴스를 저장하는 방식에는 큰 차이를 보인다.
ArrayList<E> 는 배열을 기반으로 한다. 즉 내부적으로 배열을 이용해서 인스턴스의 참조 값을 저장한다.
ArrayList<E> 의 특성
장점 데이터의 참조가 용이해서 빠른 참조가 가능하다.
단점 저장소의 용량을 늘이는 과정에서 많은 시간이 소요된다. 데이터의 삭제에 필요한 연산 과정이 매우 길다.
LinkedList<E> 는 배열을 사용하는 대신에 서로서로 연결하는 방식으로 데이터를 저장한다.
LinkedList<E>의 특성
장점 저장소의 용량을 늘리는 과정이 간단하다. 데이터의 삭제가 매우 간단하다
단점 데이터의 참조가 다소 불편하다.
'Java' 카테고리의 다른 글
Set<E> (0) | 2017.02.26 |
---|---|
Iterator 반복자 (0) | 2017.02.26 |
이스케이프 시퀀스(Escape Sequence) (0) | 2017.02.26 |
제네릭(Generics) (0) | 2017.02.25 |
자바 기본 클래스 (0) | 2017.02.25 |