List
- 동일한 데이터의 중복 허용
- 데이터 저장 순서 유지
- 객체를 저장하면 부여되는 인덱스를 통해 객체의 주소 값을 참조할 수 있음.
- 추가, 검색, 삭제 메소드가 있음
1. ArrayList
- List 인터페이스의 구현 클래스
- 배열과는 다르게 크기 변경 가능
* Vector
- ArrayList와 동일한 내부 구조를 가지고 있음.
- 동기화가 되어있지 않는 ArrayList와는 달리 동기화된 메소드로 구성되어 있어, 한 번에 하나의 스레드만 벡터의 메소드 호출 가능
-> 멀티쓰레드일 경우, ArrayList는 개발자가 명시적으로 동기화 코드 추가해야 하며, 멀티쓰레드가 아닐 경우, ArrayList가 더 빠름
2. LinkedList
- List 인터페이스의 구현 클래스
- 양방향 포인터 구조로, 각각마다 인접하는 참조를 링크해서 체인처럼 관리함.
Set
- 데이터의 저장 순서를 유지하지 않음
- 같은 데이터의 중복 저장을 허용하지 않음
- 전체 객체를 대상으로 한 번 씩 다 가져오는 반복자, Iterator를 제공함.
1. HashSet
- 순서가 필요없는 데이터를 hash table에 저장함. 성능이 Set 중에서 가장 우수함.
2. TreeSet
- 저장된 데이터의 값에 따라 정렬됨. red-black tree 타입
3. LinkedHashSet
- 연결된 목록 타입으로 구현된 hash table에 데이터를 저장함.
- 저장된 순서에 따라 값이 정렬되나 가장 느림
Map
- 키와 값으로 구성된 Entry 객체를 저장하는 구조로 키와 값은 모두 객체임
- 값은 중복이 허용되나 키는 중복이 안됨. 중복될 경우, 기존 값은 새로운 값으로 대체됨.
1. HashMap
- 해시테이블을 사용한 클래스로 중복을 허용하지 않고 순서를 보장하지 않음
2. TreeMap
- 숫자 > 알파벳 대문자 > 소문자 > 한글 순으로 키를 기준으로 데이터 정렬 가능