[Java] Collection 및 Map 인터페이스

Collection 인터페이스 구성

  • Collection
    • Set
      • SortedSet
    • List
    • Queue
  • Map
    • SortedMap

Collection

가장 상위 인터페이스.

Set

중복을 허용하지 않는 집합을 처리하기 위한 인터페이스.
Set 인터페이스를 구현한 클래스로는 HashSet, TreeSet, LinkedHashSet이 있음.

  • HashSet : 데이터를 해시 테이블에 담는 클래스로 순서 없이 저장됨.
  • TreeSet : red-black이라는 트리에 데이터를 담음. 값에 따라서 순서가 정해짐. 데이터를 담으면서 동시에 정렬을 하기 때문에 HashSet보다 성능상 느림.
  • LinkedHashSet : 해시 테이블에 데이터를 담는데, 저장된 순서에 따라서 순서가 결정됨.

SortedSet

오름차순을 갖는 Set 인터페이스.

List

순서가 있는 집합을 처리하기 위한 인터페이스이기 때문에 인덱스가 있어 위치를 지정하여 값을 찾을 수 있음. 중복을 허용하며, List 인터페이스를 상속받는 클래스 중에 가장 많이 사용하는 것으로 ArrayList가 있음.
구현된 클래스에는 ArrayListm LinkedList, Vector가 있음

  • Vector : 객체 생성시에 크기를 지정할 필요가 없는 배열 클래스
  • ArrayList : Vector와 비슷하지만, 동기화 처리가 되어 있지 않음
  • LinkedList : ArrayList와 동일하지만, Queue 인터페이스를 구현했기 때문에 FIFO 큐 작업을 수행함

Queue

여러 개의 객체를 처리하기 전에 담아서 처리할 때 사용하기 위한 인터페이스. 기본적으로 FIFO.
데이터를 담아 두었다가 먼저 들어온 데이터부터 처리하기 위해서 사용됨.
ex) SMS – 서버에서 들어오는 순서대로 처리해 주려면 Queue에 던져주고, 처음에 요청한 데이터부터 처리하면 된다.
그런데 List도 순서가 있고, Queue도 순서가 있는데 왜 굳이 Queue가 필요한가?
List는 데이터 양이 많아지면 처리 시간이 늘어나는 단점이 있어서 데이터가 많을 땐 Queue를 사용하는 게 좋음.
Queue 인터페이스를 구현한 클래스는 두 가지로 나뉨. java.util 패키지에 속하는 LinkedList, PriorityQueue는 일반적인 목적의 큐 클래스. java.util.concurrent 패키지에 속하는 클래스들은 concurrent 큐 클래스임.

  • PriorityQueue : 큐에 추가된 순서와 상관없이 먼저 생성된 객체가 먼저 나오도록 되어 있는 큐
  • LinkedBlockingQueue : 저장할 데이터의 크기를 선택적으로 정할 수도 있는 FIFO 기반의 링크 노드를 사용하는 블로킹 큐. (** 블로킹 큐 : 크기가 지정되어 있는 큐에 더 이상 공간이 없을 때 공간이 생길 때까지 대기하도록 만들어진 큐)
  • ArrayBlockingQueue : 저장되는 데이터의 크기가 정해져 있는 FIFO 기반의 블로킹 큐.
  • PriorityBlockingQueue : 저장되는 데이터의 크기가 정해져 있지 않고, 객체의 생성순서에 따라서 순서가 저장되는 블로킹 큐.
  • DelayQueue : 큐가 대기하는 시간을 지정하여 처리하도록 되어 있는 큐
  • SynchronousQueue : put() 메서드를 호출하면, 다른 스레드에서 take() 메서드가 호출될 때까지 대기하도록 되어 있는 큐. 이 큐에는 저장되는 데이터가 없음. API에서 제공하는 대부분의 메서드는 0 이나 null을 리턴함.

Map

Map은 키와 값의 쌍으로 구성된 객체의 집합을 처리하기 위한 인터페이스. 이 객체는 중복되는 키를 허용하지 않음.
Map 인터페이스를 구현한 클래스는 HashMap, TreeMap, LinkedHashMap 세 가지와 원조 클래스 격인 Hashtable 클래스가 있음.

  • Hashtable : 데이터를 해시 테이블에 담는 클래스. 내부에서 관리하는 해시 테이블 객체가 동기화되어 있으므로, 동기화가 필요한 부분에서는 이 클래스를 사용하면 됨.
  • HashMap : 데이터를 해시 테이블에 담는 클래스. Hashtable 클래스와 다른 점은 null 값을 허용한다는 것과 동기화되어 있지 않다는 것.
  • TreeMap : red-black 트리에 데이터를 담음. TreeSet과 다른 점은 키에 의해서 순서가 정해짐.
  • LinkedHashMap : HashMap과 거의 동일하며 이중 연결 리스트(doubly linked list)라는 방식을 사용하여 데이터를 담는다는 점만 다름. (** doubly linked list : 앞뒤 노드에 대한 링크 정보를 갖고 있는 것을 말함. 만약 앞의 링크 값이 null이거나 빈값이면 첫 노드를 의미하며, 반대로 뒤의 링크 값이 null이거나 빈값이면 마지막 노드를 의미함)

SortedMap

키를 오름차순으로 정렬하는 Map 인터페이스.

위로 스크롤