
크기가 고정된 배열과 달리,
ArrayList는 저장 용량을 초과한 객체들이 들어오면 자동으로 저장용량이 늘어나게 된다.
검색작업은 ArrayList가 더 빠르지만, ArrayList의 경우 요소 추가/삭제 시 요소 뒤의 인덱스들이 모두 이동하기 때문에, 빈번한 객체 삭제와 삽입이 일어날 수 있는 상황에서는 ArrayList보다는 LinkedList를 사용하는 것이 좋다.
따라서 데이터의 잦은 변경이 예상된다면
LinkedList를, 데이터의 개수가 변하지 않는다면ArrayList를 사용하는 것이 좋다.
Set 인터페이스를 구현한 대표적인 클래스로는 HashSet, TreeSet이 있다.
TreeSet은 이진 탐색 트리 형태로 데이터를 저장한다.
이진 탐색 트리는 하나의 부모 노드가 최대 두 개의 자식 노드와 연결되는 이진 트리(Binary Tree)의 일종으로, 정렬과 검색에 특화된 자료 구조이고, 기본 정렬은 오름차순이다.
Comparator와 Comparable은 컬렉션을 정렬하기 위해 자바에서 제공하는 인터페이스이다.
Comparable : 비교 대상(매개 변수)과 자기 자신을 비교하며, compareTo() 메서드를 사용해 객체를 정렬한다.
CompareTo()는 두 객체가 같으면 0, 비교할 객체가 주어진 객체보다 작으면 음수, 크면 양수를 반환한다.
Comparator : 매개 변수인 두 객체를 비교한다.
Comparator 인터페이스는 주로 기본 정렬 기준이 아닌 다른 기준으로 정렬하고 싶을 때 사용하며, 이때는 compare() 메소드를 오버라이딩한다.
Map 인터페이스를 구현한 클래스에는 HashMap, Hashtable, TreeMap, SortedMap 등이 있다.
HashMap은 해시 함수를 통해 '키'와 '값'이 저장되는 위치를 결정하므로, 사용자는 그 위치를 알 수 없고, 삽입되는 순서와 위치 또한 관계가 없다.
키로 사용할 객체는 hashCode()와 equals() 메서드를 재정의해서 동등 객체가 될 조건을 정해야 하는데, 동등 객체, 즉 동일한 키가 될 조건은 HashSet과 동일하다.hashCode()의 리턴값이 같아야 하고, equals() 메서드가 true를 리턴해야 한다.
주로 키 타입은 String을 많이 사용하는데, String은 hashcode()와 equals() 메서드가 재정의 되어 있다.
HashMap은 이름 그대로 해싱(Hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보인다.
키와 값의 타입은 기본 타입(byte, short, int, float, double, boolean, char)을 사용할 수 없고 클래스 및 인터페이스 타입만 가능하다.
또한, HashMap은 키(key)와 값(value)에 null 값을 허용하지만, Hashtable은 null 값을 허용하지 않는다.