Java 컬렉션 프레임워크


Java 2 이전에 Java는 임시 클래스를 제공했습니다. 예: 사전, 벡터, 스택 및 속성 클래스는 개체 그룹을 저장하고 조작하는 데 사용됩니다.

이 수업은 매우 유용하지만 핵심적이고 통합적인 주제가 부족합니다. 이러한 이유로 Vector 클래스를 사용하는 방식은 Properties 클래스를 사용하는 방식과 매우 다릅니다.

수집 프레임워크는 다음 목표를 달성하도록 설계되었습니다.

  • 프레임워크는 성능이 좋아야 합니다. 기본 컬렉션(동적 배열, 연결된 목록, 트리, 해시 테이블)의 구현도 효율적이어야 합니다.

  • 프레임워크를 사용하면 다양한 유형의 컬렉션이 높은 수준의 상호 운용성을 통해 유사한 방식으로 작동할 수 있습니다.

  • 컬렉션에 대한 확장 및 적용은 간단해야 합니다.

이를 위해 전체 컬렉션 프레임워크는 일련의 표준 인터페이스를 중심으로 설계되었습니다. LinkedList, HashSet, TreeSet 등과 같은 인터페이스의 표준 구현을 직접 사용할 수 있습니다. 또한 이러한 인터페이스를 통해 자신만의 컬렉션을 구현할 수도 있습니다.

컬렉션 프레임워크는 컬렉션을 표현하고 조작하기 위한 통합 아키텍처입니다. 모든 컬렉션 프레임워크에는 다음이 포함됩니다.

  • 인터페이스: 는 컬렉션을 나타내는 추상 데이터 유형입니다. 인터페이스를 사용하면 컬렉션이 표현의 세부 사항을 독립적으로 조작할 수 있습니다. 객체 지향 언어에서 인터페이스는 일반적으로 계층 구조를 형성합니다.

  • 구현(클래스): 는 컬렉션 인터페이스의 구체적인 구현입니다. 본질적으로 재사용 가능한 데이터 구조입니다.

  • 알고리즘: 은 검색 및 정렬과 같은 유용한 계산을 수행하기 위해 컬렉션 인터페이스를 구현하는 개체의 메서드입니다. 동일한 메소드가 유사한 인터페이스에서 다른 구현을 가질 수 있기 때문에 이러한 알고리즘을 다형성이라고 합니다.

프레임워크는 컬렉션 외에도 여러 Map 인터페이스와 클래스도 정의합니다. 맵은 키/값 쌍을 저장합니다. 지도는 컬렉션은 아니지만 컬렉션에 완전히 통합되어 있습니다.


컬렉션 인터페이스

컬렉션 프레임워크는 일부 인터페이스를 정의합니다. 이 섹션에서는 각 인터페이스의 개요를 제공합니다.

일련 번호인터페이스 설명
1Collection 인터페이스
를 사용하면 개체 집합을 사용할 수 있으며 컬렉션 계층 구조의 루트 인터페이스입니다.
2List 인터페이스
Collection에서 상속되며 List 인스턴스는 정렬된 컬렉션의 요소를 저장합니다.
3Set
Collection을 상속하며 중복된 요소를 포함하지 않는 컬렉션입니다.
4SortedSet
Set에서 상속받아 주문한 세트를 저장합니다.
5Map
은 고유 키를 값에 매핑합니다.
6Map.Entry
맵의 요소(키/값 쌍)를 설명합니다. Map의 내부 클래스입니다.
7SortedMap
Map에서 상속되며 키를 오름차순으로 유지합니다.
8Enumeration
이는 개체 컬렉션의 요소를 열거(한 번에 하나씩 가져오기)할 수 있는 전통적인 인터페이스이자 정의된 방법입니다. 이 전통적인 인터페이스는 반복자로 대체되었습니다.

컬렉션 클래스

Java는 컬렉션 인터페이스를 구현하는 표준 컬렉션 클래스 세트를 제공합니다. 그 중 일부는 직접 사용할 수 있는 구체적인 클래스이고 다른 일부는 인터페이스의 부분 구현을 제공하는 추상 클래스입니다.

표준 컬렉션 클래스는 다음 표에 요약되어 있습니다.

일련 번호클래스 설명
1AbstractCollection
은 대부분의 컬렉션 인터페이스를 구현합니다.
2AbstractList
은 AbstractCollection을 상속하고 대부분의 List 인터페이스를 구현합니다.
3AbstractSequentialList
AbstractList에서 상속되며 무작위 액세스 대신 데이터 요소에 대한 체인 액세스를 제공합니다.
4LinkedList
는 AbstractSequentialList를 상속하고 연결 목록을 구현합니다.
5ArrayList
은 AbstractList를 상속하여 동적 배열을 구현합니다.
6AbstractSet
은 AbstractCollection을 상속하고 대부분의 Set 인터페이스를 구현합니다.
7HashSet
은 AbstractSet을 상속하고 해시 테이블을 사용합니다.
8LinkedHashSet
해시 테이블과 예측 가능한 반복 순서로 Set 인터페이스의 연결 목록 구현.
9TreeSet
AbstractSet에서 상속되며 자연 순서를 사용하여 요소를 정렬합니다.
10AbstractMap
은 대부분의 Map 인터페이스를 구현합니다.
11HashMap
HashMap은 키-값 매핑을 저장하는 해시 테이블입니다.
HashMap은 AbstractMap을 상속하고 Map, Cloneable 및 java.io.Serialized 인터페이스를 구현합니다.
12TreeMap
은 AbstractMap을 상속하고 트리를 사용합니다.
13WeakHashMap
AbstractMap 클래스를 상속하고 약한 키 해시 테이블을 사용합니다.
14LinkedHashMap
HashMap에서 상속되며 요소의 자연 순서를 사용하여 요소를 정렬합니다.
15IdentityHashMap
AbstractMap 클래스를 상속하며 문서를 비교할 때 참조 동등성을 사용합니다.

이전 튜토리얼에서는 다음과 같이 java.util 패키지에 정의된 클래스를 통해 논의했습니다.

일련 번호 클래스 설명
1Vector
Vector 클래스는 동적 배열을 구현합니다. ArrayList와 유사하지만 다릅니다.
2Stack
Stack은 표준 후입선출 스택을 구현하는 Vector의 하위 클래스입니다.
3Dictionary
Dictionary 클래스는 키/값 쌍을 저장하는 데 사용되는 추상 클래스이며 해당 기능은 Map 클래스와 유사합니다.
4Hashtable
Hashtable은 원래 java.util의 일부이며 Dictionary의 특정 구현입니다.
5Properties
속성은 Hashtable에서 상속됩니다. 속성 목록의 각 키와 해당 값은 문자열입니다.
6BitSet
Bitset 클래스는 비트 값을 보관하기 위해 특별한 유형의 배열을 만듭니다. BitSet의 배열 크기는 필요에 따라 증가합니다.

Bitset 클래스는 비트 값을 보유하는 특별한 유형의 배열을 만듭니다. BitSet의 배열 크기는 필요에 따라 증가합니다.


알고리즘 설정

컬렉션 프레임워크는 컬렉션 및 매핑에 사용할 수 있는 여러 알고리즘을 정의합니다. 이러한 알고리즘은 컬렉션 클래스의 정적 메서드로 정의됩니다.

호환되지 않는 유형을 비교하려고 할 때 일부 메소드에서 ClassCastException이 발생할 수 있습니다. 수정 불가능한 컬렉션을 수정하려고 하면 UnsupportedOperationException이 발생합니다.

세트는 EMPTY_SET EMPTY_LIST, EMPTY_MAP의 세 가지 정적 변수를 정의합니다. 이러한 변수는 변경할 수 없습니다.


일련번호 알고리즘 설명
1 수집 알고리즘
다음은 모든 알고리즘 구현 목록입니다.

반복자 사용 방법

일반적으로 컬렉션의 요소를 반복하고 싶을 것입니다. 예를 들어 컬렉션의 각 요소를 표시합니다.

이를 수행하는 가장 쉬운 방법은 Iterator 인터페이스 또는 ListIterator 인터페이스를 구현하는 객체인 반복자를 사용하는 것입니다.

Iterator를 사용하면 루프를 통해 컬렉션의 요소를 가져오거나 삭제할 수 있습니다. ListIterator는 Iterator를 확장하여 목록의 양방향 탐색과 요소 수정을 허용합니다.

Iterator 및 listIterator 인터페이스에서 제공하는 모든 메소드는 예제를 통해 제공됩니다. <table class="reference>
일련번호 반복자 메서드 설명
1 Java Iterator 사용하기

비교기 사용 방법

TreeSet 및 TreeMap은 요소를 정렬된 순서로 저장합니다. 그러나 어떤 정렬 순서를 따르는지 정확하게 정의하는 것은 비교기입니다.

이 인터페이스를 사용하면 컬렉션을 다양한 방식으로 정렬할 수 있습니다.

일련번호 비교 방법 설명
1 Java 비교기 사용하기
예제를 통해 Comparator 인터페이스에서 제공하는 모든 메소드는 다음과 같습니다.

요약

Java 컬렉션 프레임워크는 프로그래머에게 미리 패키지된 데이터 구조와 이를 조작할 수 있는 알고리즘을 제공합니다.

컬렉션은 다른 개체에 대한 참조를 보유하는 개체입니다. 컬렉션 인터페이스는 각 컬렉션 유형에 대해 수행할 수 있는 작업을 선언합니다.

수집 프레임워크의 클래스와 인터페이스는 java.util 패키지에 있습니다.