List 컬렉션 클래스를 구현한 모든 List컬렉션 클래스는 다음과 같은 특성을 가집니다.
1. 요소의 저장 순서가 유지됩니다.
2. 같은 요소의 중복 저장을 허용합니다.
ArrayList 클래스는 가장 많이 사용되는 컬렉션 클래스 중 하나입니다.
JDK 1.2부터 제공된 ArrayList 클래스는 내부적으로 배열을 이용하여 요소를 저장합니다.
-크기를 변경할 수 없는 인스턴스이므로, 크기를 늘리기 위해서는 새로운 배열을 생성하고 기존의 요소들을 옮겨야 하는 복잡한 과정을 거쳐야 합니다.
물론 이 과정은 자동으로 수행되지만, 요소의 추가 및 삭제 작업에 걸리는 시간이 매우 길어지는 단점을 가지게 됩니다.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
public class Collection2 {
public static void main(String[] args) {
ArrayList<Integer> arrList = new ArrayList<Integer>();
//add()메서드를 이요한 요소의 저장
arrList.add(40);;
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)+ ",");
}
System.out.println();
//remove()메서드를 이용한 요소의 제거
arrList.remove(1);
//향상된 for문과 get() 메서드를 이용한 요소의 출력
for(int e : arrList){
System.out.print(e + ",");
}
System.out.println();
//Collections.sort()메서드를 이요한 요소의 출력
Collections.sort(arrList);
//iterator() 메서드와 get()메서드를 이용한 요소의 출력
Iterator<Integer> iter = arrList.iterator();
while(iter.hasNext()){
System.out.print(iter.next() +",");
}
System.out.println();
// set() 메소드를 이용한 요소의 변경
arrList.set(0, 20);
for (int e : arrList) {
System.out.print(e + " ");
}
System.out.println();
// size() 메소드를 이용한 요소의 총 개수
System.out.println("리스트의 크기 : " + arrList.size());
}
}
LinkedList 클래스는 ArrayList 클래스가 배열을 이용하여 요소를 저장함으로써 발생하는 단점을 극복하기 위해 고안되었습니다.
JDK 1.2부터 제공된 LinkedList 클래스는 내부적으로 연결 리스트(linked list)를 이용하여 요소를 저장합니다.
하지만 연결 리스트는 저장된 요소가 비순차적으로 분포되며, 이러한 요소들 사이를 링크(link)로 연결하여 구성합니다.
다음 요소를 가리키는 참조만을 가지는 연결 리스트를 단일 연결 리스트(singly linked list)라고 합니다.
import java.util.LinkedList;
public class Collection3 {
public static void main(String[] args) {
LinkedList<String> lnkList = new LinkedList<String>();
//add()메서드를 이용한 요소의 저장
lnkList.add("넷");
lnkList.add("둘");
lnkList.add("셋");
lnkList.add("하나");
// for 문과 get() 메소드를 이용한 요소의 출력
for (int i = 0; i < lnkList.size(); i++) {
System.out.print(lnkList.get(i) + " ");
}
System.out.println();
// remove() 메소드를 이용한 요소의 제거
lnkList.remove(1);
// Enhanced for 문과 get() 메소드를 이용한 요소의 출력
for (String e : lnkList) {
System.out.print(e + " ");
}
System.out.println();
// set() 메소드를 이용한 요소의 변경
lnkList.set(2, "둘");
for (String e : lnkList) {
System.out.print(e + " ");
}
System.out.println();
// size() 메소드를 이용한 요소의 총 개수
System.out.println("리스트의 크기 : " + lnkList.size());
}
}
Vector 클래스는 JDK 1.0부터 사용해 온 ArrayList 클래스와 같은 동작을 수행하는 클래스입니다.
-현재의 Vector 클래스는 ArrayList 클래스와 마찬가지로 List 인터페이스를 상속받습니다.
따라서 Vector 클래스에서 사용할 수 있는 메소드는 ArrayList 클래스에서 사용할 수 있는 메소드와 거의 같습니다.
-하지만 현재에는 기존 코드와의 호환성을 위해서만 남아있으므로, Vector 클래스보다는 ArrayList 클래스를 사용하는 것이 좋습니다.
List 인터페이스는 Collection 인터페이스를 상속받으므로, Collection 인터페이스에서 정의한 메소드도 모두 사용할 수 있습니다.
List 인터페이스에서 제공하는 주요 메소드는 다음과 같습니다.