특징
- 요소의 저장 순서가 유지된다.
- 같은 요소의 중복 저장을 허용한다.
ArrayList<E> 클래스
- 내부적으로 배열을 이용하여 요소를 저장한다. 배- 열을 이용하기 때문에 인덱스를 이용해 배열 요소에 빠르게 접근할 수 있다.
- 배열은 크기를 변경할 수 없는 인스턴스다.
- 크기를 늘리기 위해서는 새로운 배열을 생성하고 기존의 요소들을 옮겨야 하는 복잡한 과정을 거쳐야 한다.
- 자동으로 수행되는 과정이지만 요소의 추가 및 삭제 작업에 걸리는 시간이 매우 길어진다.
- JDK 1.2부터 제공
- 사용 예시
ArrayList<Integer> arrList = new ArrayList<Integer>();
//add() 메소드를 이용한 요소의 저장
arrList.add(20);
arrList.add(30);
arrList.add(10);
//for 문과 get() 메소드를 이용한 요소의 출력
for (int i = 0; i < arrList.size(); i++) {
System.out.print(arrList.get(i) + " ");
}
//remove() 메소드를 이용한 요소의 제거
arrList.remove(1);
//Enhanced for 문과 get() 메소드를 이용한 요소의 출력
for (int e : arrList) {
System.out.print(e + " ");
}
//Collections.sort() 메소드를 이용한 요소의 정렬
Collections.sort(arrList);
//iterator() 메소드와 get() 메소드를 이용한 요소의 출력
Iterator<Integer> iter = arrList.iterator();
while (iter.hasNext()) {
System.out.print(iter.next() + " ");
}
//set() 메소드를 이용한 요소의 변경
arrList.set(0, 20);
for (int e : arrList) {
System.out.print(e + " ");
}
//size() 메소드를 이용한 요소의 총 개수
System.out.println("리스트의 크기 : " + arrList.size());
LinkedList<E> 클래스
- 내부적으로 연결 리스트(linked list)를 이용하여 요소를 저장한다.
- 배열은 저장된 요소가 순차적으로 저장된다.
- 저장된 요소가 비순차적으로 분포되며 이러한 요소들 사이를 링크(link)로 연결하여 구성한다.
- 관련 용어
- 단일 연결 리스트(singly linked list)
- 다음 요소를 가리키는 참조만을 가지는 연결 리스트
- 요소의 저장과 삭제 작업이 다음 요소를 가리키는 참조만 변경하면 되므로 아주 빠르게 처리할 수 있다.
- 현재 요소에서 이전 요소로 접근하기가 매우 어렵다.
- 이중 연결 리스트(doubly linked list)
- 다음 요소를 가리키는 참조와 이전 요소를 가리키는 참조도 가지는 연결 리스트
- 단일 연결 리스트(singly linked list)
- JDK 1.2부터 제공
- 사용 예시
LinkedList<String> lnkList = new LinkedList<String>();
//add() 메소드를 이용한 요소의 저장
lnkList.add("셋");
lnkList.add("넷");
lnkList.add("하나");
//for 문과 get() 메소드를 이용한 요소의 출력
for (int i = 0; i < lnkList.size(); i++) {
System.out.print(lnkList.get(i) + " ");
}
//remove() 메소드를 이용한 요소의 제거
lnkList.remove(1);
//Enhanced for 문과 get() 메소드를 이용한 요소의 출력
for (String e : lnkList) {
System.out.print(e + " ");
}
// set() 메소드를 이용한 요소의 변경
lnkList.set(1, "둘");
for (String e : lnkList) {
System.out.print(e + " ");
}
//size() 메소드를 이용한 요소의 총 개수
System.out.println("리스트의 크기 : " + lnkList.size());
Vector<E> 클래스
- 현재의 Vector 클래스는 ArrayList 클래스와 마찬가지로 List 인터페이스를 상속받는다.
- JDK 1.0부터 제공되는 ArrayList 클래스와 같은 동작을 수행하는 클래스
- 현재에는 기존 코드와의 호환성을 위해서만 남아있으므로 Vector 클래스보다는 ArrayList 클래스를 사용하는 것이 좋다.