Java Collections Framework(JCF)

Java에서 Collection이란 데이터의 집합, 그룹을 의미한다. JCF는 이러한 데이터, 자료구조인 Collection 인터페이스와 구현체를 제공한다. 아래 사진은 Java 컬렉션 프레임워크의 상속 구조를 나타낸다. 배열과 비슷하지만 크기에 제한이 없다는 장점이 있다.

스크린샷 2019-11-11 오후 4.48.20.png

List와 Set, Queue 인터페이스는 모두 Collection 인터페이스를 상속받지만, 구조상의 차이로 인해 Map 인터페이스는 별도로 정의되어 있다.

각 인터페이스를 살펴보자

Set

순서가 중요하지 않고 데이터의 중복을 허용하지 않는다.

  • HashSet : 가장 빠른 접근속도, 순서를 전혀 예측 할 수 없다. 객체를 HashCode() 메소드를 통해 얻은 코드로 관리한다.
  • LinkedHashSet : 추가된 순서 또는 가장 최근에 접근한 순서대로 접근 가능
  • TreeSet : 정렬된 순서대로 보관하면 정렬이 가능하다.

List

Index를 사용하여 특정 위치에 요소에 접근 할 수 있으며 중복을 허용한다.

  • ArrayList : 단방향 포인터 구조로, 순차 접근에 강점이 있으며, Thread Safe 하지 않다. 내부적으로는 Red-Black Tree 로 구성되어 있다.
  • Vector : ArrayList의 구형버전이며, 모든 메소드가 동기화 되어 있어 Thread-Safe 하다. 단 그만큼 퍼포먼스는 좋지 않다.
  • LinkedList : ArrayList는 내부 배열 객체를 저장해서 인덱스로 관리하지만, LikedList는 링크로 관리한다. 때문에 빈번한 삭제/삽입에서 좋은 성능을 나타낸다.

Map

Key, Value를 저장하면 Key는 유일해야한다.

  • HashMap : 키로 사용할 객체는 hashCode(), equlas()메소드를 오버라이딩해서 동등 객체의 조건을 정해야 한다. Thread safe 하지 않다. (HashTable는 Thread safe)
  • TreeMap : 이진트리를 기반으로 구현, TreeSet과 같은 구조를 가지고 있다. 왼쪽이 낮은 값, 오른쪽이 높은 값을 가진다.

메소드

스크린샷 2019-11-11 오후 5.22.18.png

Reference

postitforhooney님 블로그
minwan1님 블로그