java.util 패키지의 Collection Framework
Collection
ㄴ List (ArrayList, Vector, LinkedList)
ㄴ Set (HashSet, TreeSet..)
Map
ㄴ HashMap, HashTable, TreeMap, Properties..
ArrayList와 Vector 차이: Vector는 동기화 메소드로 구성되어 있기 때문에 멀티스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있음 (Thread safe)
List와 달리 Set은 순서 유지 X, 중복 허용 X
HashSet은 객체 저장 전에 hashCode() 값이 같은 객체가 있는지 확인한 다음, 만약 있다면 equals() 값도 true인지 확인하여 true이면 동등 객체라고 판단하여 저장하지 않는다.
(즉, 인스턴스가 달라도 hashCode(), equals() 값이 같으면 중복 저장하지 않는다)
Map: key-value로 구성된 Entry 객체를 저장. key는 중복 불가, value는 중복 가능. key, value의 타입은 기본 타입을 사용할 수 없고 클래스 및 인터페이스 타입만 가능함
HashMap도 HashSet과 마찬가지로, HashMap의 key로 사용할 객체는 hashCode()와 equals()를 재정의하여 동등 객체가 될 조건을 정해야 한다.
HashMap과 Hashtable 차이: 두 자료구조 모두 동일한 내부 구조를 가지며 동등 객체 조건을 정해야 하지만 Hashtable은 Thread safe하다.
Properties: key, value 값을 String으로 제한한 컬렉션. 애플리케이션 옵션 정보, DB 연결 정보, 다국어 정보 등이 저장된 프로퍼티(~.properties) 파일을 읽을 때 주로 사용함
TreeSet, TreeMap: 이진 트리(binary tree)를 이용한 트리 구조로 객체를 저장하여 검색 기능을 강화. 오름차순으로 노드들을 가져오는 iterator() 메소드와 내림차순으로 정렬된 NavigableMap을 리턴하는 descendingMap() 등 정렬 기능을 가진 메소드를 제공하기 때문에, Comparable 인터페이스의 compareTo(T o)가 구현된 정렬 가능한 객체를 요구한다.
public class Person implements Comparable<Person> {
...
...
@Override
public int compareTo(Person o) {
...
}
}
TreeSet<E> treeSet = new TreeSet<E>(new AscendingComparator());
public class AscendingComparator implements Comparator<E> {
@Override
public int compare(E o1, E o2) {
...
}
}
List<T> list = Collections.synchronizedList(new ArrayList<T>());
// List, Map, Set에 대해 제공