상속 구조
- 초록색 : 인터페이스
- 파란색 : 클래스
- 빨간 실선 : 상속
- 보라색 점선 : 구현
- 컬렉션 프레임워크는 추상화된 여러 인터페이스를 각각의 클래스에서 구현하는 방식으로 이루어져있음
- 위 상속 구조도 말고도 Arrays가 있음
자료구조를 구현한 대표적인 컬렉션
1. List
: 배열과 유사한 구조로 객체를 저장하게 되면 각각의 주소에 인덱스가 부여되고, 그 인덱스로 겸색, 삭제 기능을 제공
- 순서를 가지고, 같은 객체 중복 저장 가능
- ArrayList, LinkedList, Vector
- 차이)
- ArrayList & Vector : 동적 크기를 가지는 배열의 형태
- LinkedList : 연결 리스트의 형태
- ArrayList : 동기화 되어있지 않아 멀티 스레드 환경에서 명시적인 동기화가 필요
- Vectot : 동기화된 자료구조로 멀티 스레드 환경에서 안전하게 사용 가능
- 연산 속도를 비교해보면 동기화 여부의 차이로 인해, ArrayList가 Vector보다 빠름
2. Set
: 집합 형태의 구조
- 중복된 데이터를 저장할 수 없고, 순서가 존재하지 않음
- 저장된 데이터를 인덱스로 관리하지 않기 때문에 인덱스를 매개변수로 가지는 메서드가 존재하지 않음
- HashSet : 순서가 없음, TreeSet : 순서가 있음
- 중복된 데이터)
- Set에서는 객체의 hashCode로 중복을 판별
- 다른 객체지만 같은 hashCode를 갖는다면 같은 객체로 판별
- == 연산자가 아닌 equals() 메서드로 비교했을 경우, true 값이 나오면 같은 객체로 판별
3. Map
: Key와 Value로 구성된 Entry 객체를 저장하는 객체
- Key의 객체는 중복될 수 없지만, Value의 객체는 중복될 수 있음
- Key로 객체를 관리하기 때문에 대부분의 메서드의 파라미터로 Key를 가짐
- HashMap, HashTable : 엔트리의 순서를 보장하지 않음, TreeMap : 순서를 가짐
- 차이)
- HashMap과 HahTable의 차이점은 동기화 여부
- TreeSet & TreeMap : TreeSet은 Set 인터페이스를 구현한 클래스고, TreeMap은 Map 인터페이스를 구현한 클래스
- 이 둘은 트리 자료구조를 통해 검색 기능에 특화된 클래스
- 순서를 가지고 있기 때문에, TreeSet에 저장되는 객체와 TreeMap의 Key에 저장되는 객체는 Comparable 인터페이스를 구현하고 있어야 함
4. Stack (Class)
: LIFO 구조
- 데이터를 한 방향으로만 저장할 수 있고, Top으로 정한 곳에 위치한 데이터만 삽입 / 조회 / 삭제 할 수 있음
- Vector 클래스를 상속받았지만, 사실상 독자적인 메서드들로 이루어져 있음
5. Queue (Interface)
: FIFO 구조
- Front로 정한 곳에서는 조회 / 삭제 연산이 일어나고, Rear로 정한 곳에서 삽입 연산이 발생
- LinkedList 클래스로 구현되어 있음
6. 수정할 수 없는 컬렉션
- List, Set, Map에서 생성하는 경우, .of(), .copyOf() 메서드를 상황에 맞게 사용할 수 있음
- 배열을 List로 만들 때 수정할 수 없는 컬렉션을 생성하는 경우, Arrays 클래스의 .asList()메서드를 사용할 수 있음
'JAVA' 카테고리의 다른 글
19. HashMap (0) | 2025.04.29 |
---|---|
17. Reflection(Annotation) (0) | 2025.04.29 |
16. Generic (1) | 2025.04.29 |
15. Default Method & 추상 클래스 & 인터페이스 (0) | 2025.04.29 |
14. Lambda & Functional Interface (0) | 2025.04.17 |