소개

거의 모든 프로그램은 일부 데이터 집합을 저장해야 합니다. 문자열과 숫자, 객체 등이 될 수 있습니다. 어레이는 뛰어난 스토리지 솔루션입니다. 그러나 배열에는 특정 제한 사항이 있습니다. 예를 들어 크기가 고정되어 있고 요소를 제거할 수 없으며 중간에 요소를 삽입할 수 없습니다. 컬렉션은 이러한 제한 사항과 기타 제한 사항을 해결하기 위해 만들어졌습니다. 모든 유형의 컬렉션(이 레슨의 뒷부분에서 볼 수 있듯이 많은 컬렉션이 있음)에는 동적으로 크기를 조정할 수 있는 기능이 있습니다. 일부 컬렉션 유형은 순서가 지정된 요소를 저장하고 새 요소가 추가되면 자동으로 순서대로 배치할 수 있습니다.

이 레슨에서는 Java Collections Framework 에서 기본 콜렉션의 클래스 계층 구조에 대해 알아봅니다 . 또한 표준 Java Collections Framework 의 기능을 확장하는 다양한 대체 라이브러리가 있습니다 . 그중 가장 인기 있는 것은 Guava (Google 컬렉션 라이브러리)입니다.

*모든 인터페이스와 클래스가 다이어그램에 표시되는 것은 아닙니다. 이해를 돕기 위해 일부는 생략했습니다.

기본 인터페이스

다이어그램은 나머지 클래스와 인터페이스를 구성하기 위해 구현되는 두 가지 기본 인터페이스가 있음을 보여줍니다.

다음 인터페이스를 살펴보겠습니다.

  1. 컬렉션 — 요소(객체) 집합을 포함하는 일반 컬렉션입니다. 이 컬렉션에는 삽입( add , addAll ), 제거( remove , removeAll , clear ), 검색( contains , containsAll ), 컬렉션이 비어 있는지 확인( isEmpty ) 및 크기 가져오기( size ) 와 같은 요소 작업을 위한 기본 메서드가 있습니다.

  2. Map — 키-값 쌍으로 구성된 컬렉션입니다. 또한 Map 의 각 키는 고유합니다. 동일한 값을 갖는 두 개의 키는 없습니다. 이 컬렉션을 사전 이라고도 합니다. 지도는 별도의 인터페이스입니다. Collection 인터페이스를 구현하지 않지만 Java Collections Framework 의 일부입니다.

지도 의 요소 작업에 유용한 방법 :

  • 삽입 ( 넣다 , 모두 넣다 )

  • get ( get , keySet , values ​​, entrySet )

  • 제거하다( 제거하다 , 지우다 )

  • 검색( containsKey , containsValue )

  • 컬렉션이 비어 있는지 확인( isEmpty )

  • 크기를 얻으십시오 ( 크기 )

이제 그들 각각에 대해 더 이야기합시다.

컬렉션 인터페이스

Collection 인터페이스는 단일 메소드인 iterator() 를 갖는 Iterable 인터페이스를 확장 합니다 . 우리에게 이것은 Iterable을 상속하는 모든 컬렉션이 반복자를 반환할 수 있음을 의미합니다.

반복자는 특정 구현에 관계없이 컬렉션의 요소에 액세스하는 데 사용할 수 있는 특수 개체입니다.

그림은 List , QueueSet 의 3개 인터페이스가 Collection 인터페이스를 상속함을 보여줍니다 . 이제 각각에 대해 간단히 살펴보겠습니다.

목록은 중복 값을 허용하는 정렬된 모음입니다. 목록 의 특정 기능은해당 요소에 번호가 매겨지고 번호(인덱스)로 액세스할 수 있다는 것입니다.

Queue 큐에 추가된 순서대로 요소를 저장합니다.

목록과 달리 Set은 반복되는 요소를 허용하지 않는 정렬되지 않은 컬렉션을 나타냅니다. Set 인터페이스 수학적 집합 의 개념에 해당합니다 .

지도 인터페이스의 구현

인터페이스가 고유한 키와 값 사이의 매핑을 나타내는 것을 볼 수 있습니다 .


interface Map<K, V>

여기서 K 는 키의 유형이고 V 는 저장된 값의 유형입니다.

키를 사용하여 Map 에서 데이터를 추출할 수 있습니다 . Map 에 요소를 추가하려면 키와 값을 지정해야 합니다.

Map 의 몇 가지 구현을 살펴보겠습니다 .

  1. HashMap은 해시 테이블을 기반으로 하는 Map 의 구현입니다null 을 포함하여 모든 유형의 키와 값을 저장할 수 있습니다. 요소의 순서는 보장되지 않습니다.

  2. LinkedHashMap 은 데이터를 요소의 연결된 목록으로 저장하는 데이터 구조입니다. 요소는 추가된 순서대로 목록에 나타납니다.

  3. TreeMap은 ( NavigableMap 인터페이스를 통해) SortedMap 인터페이스를 구현합니다. 이 구조의 요소는 정렬된 순서로 저장됩니다(새 요소가 추가되면 컬렉션이 자동으로 정렬됨). TreeMap은 빠른 검색으로 많은 양의 정렬된 데이터를 저장하는 데 적합합니다.

오래된 컬렉션:

Java에는 이전 버전의 오래된 컬렉션이 있습니다(이전 버전과의 호환성을 유지하기 위해). 이러한 이전 컬렉션은 새 코드에서 사용하면 안 됩니다.

  • Enumeration Iterator 인터페이스와 유사합니다.

  • Vector — 정렬된 요소 목록이며 ArrayList 클래스와 유사합니다.

  • 스택 — 책 더미와 상호 작용하는 방식과 같은 요소를 저장하고 조작하는 스택 데이터 구조의 구현입니다. 스택에 요소를 추가( push )하고 제거( pop )하는 메서드가 있습니다.

  • 사전 — Map 인터페이스 와 유사하지만 추상 클래스입니다.

  • Hashtable HashMap 과 유사합니다 .

Collections Framework 에 대한 자세한 내용은 이 문서를 참조하십시오 .