JAVA

18. Collection Framework(List, Map, Set...)

ggomjiu 2025. 4. 29. 03:43

상속 구조

- 초록색 : 인터페이스

- 파란색 : 클래스

- 빨간 실선 : 상속

- 보라색 점선 : 구현

- 컬렉션 프레임워크는 추상화된 여러 인터페이스를 각각의 클래스에서 구현하는 방식으로 이루어져있음

- 위 상속 구조도 말고도 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