Java Collection Framework (JCF)

JCF란?

  • 자바 컬렉션 프레임워크란 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것이다.
  • 예를들어 List, Stack, Queue, Tree, Hash, 버블 정렬, 퀵 정렬, 이진 탐색 등은 제네릭 기반의 클래스와 메소드로 미리 구현 되어 있다.

R1280x0 R1280x0-2

  • 컬렉션 프레임워크에서는 데이터를 저장하는 자료 구조에 따라 위와 같이 핵심이 되는 몇가지 주요 인터페이스를 정의하고 있다.

🔌 List 인터페이스

  • List 인터페이스를 구현하는 컬렉션 클래스들이 갖는 공통적인 특성 2가지는 다음과 같다.
    • 인스턴스의 저장 순서를 유지한다.
    • 동일한 인스턴스의 중복 저장을 허용한다.

ArrayList 클래스

  • 배열 기반 자료구조, 배열을 이용하여 인스턴스 저장
  • 내부적으로 배열을 생성해서 인스턴스를 저장한다.
  • 필요하면 내부적으로 배열을 더 큰 배열로 교체한다.
  • 내부적으로 배열 저장 공간을 늘리는 과정에서 시간이 비교적 많이 소모된다.
  • 배열 중간에 원소를 삽입, 삭제할 경우 내부 원소들을 한 칸 씩 옮겨야하는 단점이 있다.
  • 하지만 인덱스로 저장된 인스턴스를 빠르게 참조할 수 있다.

LinkedList 클래스

  • 리스트 기반 자료구조, 리스트를 구성하여 인스턴스 저장
  • 저장된 인스턴스의 참조 과정이 배열에 비해 복잡하다. (앞에서부터 순차적으로 접근해야함) 따라서 느릴 수 있다.
  • 저장 공간을 늘리는 과정이 간단하다.
  • 저장된 인스턴스의 삭제 과정이 단순하다.

Vector 클래스

Stack 클래스

🔌 Queue 인터페이스

PriorityQueue 클래스

🔌 Deque 인터페이스

ArrayDeque 클래스

🔌 Set 인터페이스

  • Set 인터페이스를 구현하는 컬렉션 클래스들이 갖는 공통적인 특성 2가지는 다음과 같다.
    • 저장 순서가 유지되지 않는다.
    • 데이터의 중복 저장을 허용하지 않는다.

HashSet 클래스

  • HashSet 클래스는 데이터의 중복 저장이 허용되지 않는다. 어떻게 인스턴스의 중복을 판단할까?
  • HashSet 클래스는 Object 클래스에 정의되어 있는 equals와 hashcode 메서드의 호출 결과를 근거로 인스턴스의 중복을 판단한다.
  • 내부적으로 먼저 hashcode를 호출해서 값이 같은지 확인한다. 같다면, equals로 한 번 더 비교한다.
  • hashcode 값이 같다는 것은 해쉬 충돌이 일어났다는 것이며, 이 경우 equals로 한 번 더 비교를 하는 것이다.

LinkedHashSet 클래스

  • 중복을 허용하지 않고, 저장 순서대로 인스턴스를 저장한다.

🔌 SortedSet 인터페이스

TreeSet 클래스

  • TreeSet 클래스는 트리라는 자료구조를 기반으로 인스턴스를 저장한다.
  • 이는 정렬된 상태가 유지되면서 인스턴스가 저장됨을 의미한다. 기본적으로 오름차순으로 정렬되며 인스턴스가 저장된다.

정렬 기준 바꾸는 법

  • TreeSet에 들어갈 클래스가 Comparable 인터페이스를 구현한다.

  • 또는 comparator 인터페이스를 구현하는 클래스의 인스턴스를 TreeSet의 생성자에 넘겨준다. 즉, 정렬 기준을 생성자를 통해 넘겨준다.

    public TreeSet(Comparator<? Super E> comparator)
    

🔌 Map<K, V> 인터페이스

HashTable 클래스

HashMap 클래스

LinkedHashMap 클래스

🔌 SortedMap 인터페이스

TreeMap 클래스

참고

  • https://jobjava00.github.io/language/java/basic/collections/

태그:

카테고리:

업데이트: