Collection은 여러 종류의 데이터 구조가 공통으로 가져야 하는 기능을 정의해줍니다. (add(), remove(),isEmpty())
Collections은 컬렉션 데이터를 조작하기 위한 다양한 유틸리티 함수를 제공해줍니다. (sort(),reverse())
list는 순서가 있는 컬렉션이며 중복을 허용하고 구현체로는 ArrayList와 LinkedList가 있습니다.
set은 순서가 없는 컬렉션이며 중복을 허용하지 않으며 구현체로는 HashSet, TreeSet등이 있습니다.
map은 key-value 구조로 저장하며 key값은 중복을 허용하지 않고 value값은 중복을 허용합니다.
Map 인터페이스의 구현체로 동기화와 null 허용의 차이가 있습니다.
Hashtable은 동기화가 되어있기 때문에 여러 스레드가 동시에 Hashtable을 수정하려고 할 때, 한 개의 스레드만 수정할 수 있습니다. 따라서 멀티쓰레드 환경에서 thread-safe 성질을 가지고 있지만 그렇기 때문에 속도가 느립니다.
반면에 HashMap은 동기화가 되어있지 않기 때문에 thread-safe하지 않습니다.
그렇기 때문에 Hashtable 처럼 멀티 쓰레드 환경에서 사용할 수 있으며 속도도 빠른 클래스를 사용하기 위해서는 ConcurrentHashMap을 사용합니다.
검색, 삽입, 삭제 등 성능이 중요한 경우에는 HashMap을 사용하고
데이터의 정렬 순서가 중요한 경우에는 TreeMap을 사용합니다.
HashMap은 key-value 쌍을 저장하기 때문에 키에 대한 검색, 삽입, 삭제 작업이 O(n) 시간복잡도를 가집니다.
반면에 TreeMap은 red-black 트리를 사용하여 데이터를 정렬된 상태로 저장하기 때문에 검색, 삽입, 삭제 작업 시 O(log n)의 시간을 가집니다.
해싱을 통해 Key-value 쌍을 저장하며 이로 인해 검색 및 수정 작업에 용이합니다.
하지만 한정된 출력값으로 매핑하다보니 동일한 버킷 위치에 같은 값의 해시코드를 가질 수 있으며 이를 해시충돌이라고 합니다.
해시 충돌을 제어하는 방식에는 체이닝 방식과 개방 주소법이 있습니다
또한 null을 key와 value로 가질 수 있으며 null key에 대해서 0번 버킷에 저장됩니다.
Thread-safe하지 않은 특징을 가지고 있어서 멀티 스레드 환경에서 문제가 발생할 수 있습니다.