[JAVA] Collection Framework Interface

유존돌돌이·2022년 2월 21일
0

JAVA

목록 보기
17/22
post-thumbnail

Collection

자료들을 효율적으로 모을 수 있는 자료구조

주황색 상자 : 인터페이스
파란색 상자 : 클래스
파란색 화살표 : extends
녹색 화살표 : implements

  • Map 은 Collection 인터페이스를 상속받지 않지만 JCF(Java Collections Framework)에 포함된다.

1. List

  • 순서가 중요한 Collection.
  • 데이터의 중복을 허용
  • 기존 배열과 다르게 크기가 동적이다.
    1) ArrayList : 빠르고 순차적인 접근에 강점이 있으며, 동기화 보장하지 않음.
    2) Vector : 모든 메소드가 동기화가 되어 있어 멀티스레드에 안전하지만 상대적 느림.
    3) LinkedList : 양방향 포인터 구조로 삽입/삭제가 빈번할 때 빠르다.

2. Set

  • 순서가 없는 Collection
  • 데이터의 중복 허용하지 않음
    1) HashSet : 내부적 해싱을 이용한 클래스로 Set파생 클래스에서 가장 성능우수하며, 동기화 보장하지 않음.
    2) TreeSet : 내부적 레드-블랙 트리 방식으로 구현한 클래스로 레드-블랙 트리는 이진 탐색 트리의 일종으로 log(n)의 성능을 갖고 있음.

3. Queue

  • 선입선출을 기본으로 하는 Collection
    1) PriorityQueue : 들어온 순서가 아닌 우선순위 별로 Queue에서 정렬이 됨
    2) ArrayDeqeue : 보통의 Queue와는 다르게 양쪽에서 데이터를 꺼내올 수 있음

4. Map

  • 키-밸류(Key-Value) 쌍으로 자료를 보관.
  • Map에서는 일반적으로 순서 고려를 안함
  • 키는 중복을 허용하지 않음.
    1) HashMap : 대표적인 Map Collection이며, 동기화를 보장하지 않음. 또한 키 또는 밸류에 null값을 저장할 수 있음.
    2) Hashtable : HashMap과 거의 비슷하나, 동기화를 보장함. 키 또는 밸류에 null값 저장 불가
    3) SortedMap(TreeMap) : 이진검색트리의 형태로 키와 값의 쌍으로 이루어진 데이터를 저장하며, 정렬된 순서로 저장이 되므로 검색이 빠름
    4) LinkedHashMap : HashMap을 상속받아 흡사 하나, 입력한 순서대로 반복 가능

비동기 Collection, 병렬처리 Collection

1. Collections.synchronized

위에 언급한 ArrayList, HashSet, HashMap은 동기화를 보장하지 않기 때문에 동기화를 지원해주는 Collection을 사용할 수 있다.

List<String> list = Collections.synchronizedList(new ArrayList<>());
Map<Integer, Integer> map = Collections.synchronizedMap(new HashMap<>());
Set<Integer> set = Collections.synchronizedSet(new HashSet<>());

2. Concurrent

위와 같이 Synchronized 된 클래스를 사용할 수 있지만, 아무래도 성능이 좋지가 않다.
그래서 자바에서는 멀티스레드환경에서 안전하면서도, 스레드가 병렬적으로 작업을 처리할 수 있도록 java.util.concurrent 패키지에서 ConcurrentHashMap, ConcurrentLinkedQueue를 제공한다.

Map<K,V> map = new ConcurrentHashMap<K,V>();
Queue<E> queue = new ConcurrentQueue<E>();

Concurrent는 segment기준으로 사용하는 곳만 락을 걸기 때문에 사용하지 않는 부분은 병렬처리할 수 있다.

0개의 댓글