1. Collection's hierarchy
Collection interface와 Map interface가 따로 있는 이유는, 두 interface가 다음 이유들 때문에 서로 호환 가능하지 않기 때문이다.
- Collection은 add(Object o) 메소드를 가지지만, Map은 key-value 쌍을 갖기 때문에 그 메소드를 가질 수가 없다.
- Map은 keySet, valueSet 등을 지원하지만 Collection은 그러한 view를 가지지 않는다.
2. difference questions
1) Set vs List
- Set은 순서가 없는 collection인 반면, List는 zero-based index를 기반으로 한 순서 있는 collection
- Set은 중복을 허용하지 않는 반면, List는 중복 허용
- Set은 오직 하나의 null 값만 허용하는 반면, List는 얼마든지 null 값 가질 수 있음
2) List vs Map
- List는 단순 요소들의 collection인 반면, Map은 key-value 쌍의 collection
- List의 최상위 interface는 Collection인 반면, Map은 그 자체가 최상위 interface
3) HashMap vs HashTable
- HashTable은 synchronized인 반면, HashMap은 그렇지 않음
- HashTable은 null key나 null value를 허용하지 않는 반면, HashMap은 하나의 null key, 여러 개의 null value를 허용
4) ArrayList vs LinkedList
- ArrayList는 동적으로 사이즈가 변하는 array에 요소들을 저장하는 반면, LinkedList는 doubly-linked list에 요소를 저장함
- ArrayList는 random access를 허용하기 때문에 어떤 요소든 상수 시간에 접근할 수 있다. 하지만 삽입/삭제 시 요소들을 옮겨야 하기 때문에 O(n) 시간이 걸린다. 반면, LinkedList는 삽입/삭제를 상수 시간에 할 수 있지만 요소에 접근하기 위해서는 sequential access를 해야 하기 때문에 O(n) 시간이 걸린다.
- ArrayList는 각 index에 실제 object(data)만을 갖고 있지만 LinkedList의 각 node는 data와 앞/뒤 node의 주소 값을 가지고 있어야 하기 때문에 메모리를 더 많이 차지한다.
참고