1. 컨테이너 및 컬렉션

컨테이너 또는 컬렉션은 한 번에 여러 개체를 저장하고 처리할 수 있는 클래스입니다. 배열과 목록이라는 두 종류의 컨테이너를 이미 알고 있습니다.

Java에는 수십 개의 컬렉션이 있으며 각 컬렉션은 고유한 방식으로 요소를 저장합니다. 다음은 그 중 몇 가지입니다.

수집 수업 설명
List
ArrayList
목록
LinkedList
연결된 목록
Vector
벡터
Stack
스택
Set
HashSet
세트
TreeSet
LinkedHashSet
Queue
PriorityQueue
대기줄
ArrayQueue
Map
HashMap
지도/사전
TreeMap
HashTable

여기서 이름은 다소 모호합니다. 대부분의 프로그래밍 언어에서는 이러한 모든 데이터 구조를 컬렉션이라고 하지만 Java에서는 그렇지 않습니다. Java에서 이러한 클래스 중 일부는 Collection인터페이스를 구현하지만 다른 클래스는 구현하지 않습니다.

따라서 컬렉션은 넓은 의미의 컬렉션과 좁은 의미의 컬렉션 (인터페이스를 구현한 컬렉션만 Collection) 으로 나뉩니다 .

따라서 혼동을 피하기 위해 컬렉션 에 대해 말할 때 우리는 좁은 의미의 단어, 즉 Collection인터페이스를 구현하는 클래스를 의미합니다. , 및 유형 List은 모두 컬렉션입니다. 넓은 의미에서 컬렉션은 일반적으로 컨테이너 라고 합니다 . 여기에는 및 배열 과 같은 유형이 포함됩니다 .SetQueueMap


2. HashSet수집

클래스 HashSet는 일반적인 세트 컬렉션입니다. 여러모로 클래스와 비슷합니다 ArrayList. 어떤 면에서는 더 원시적인 버전입니다.

HashSet다음과 같은 문을 사용하여 개체를 만들 수 있습니다 .

HashSet<Type> name = new HashSet<Type>();

Type컬렉션 에 저장할 요소의 유형은 어디에 있습니까 HashSet?

클래스 HashSet에는 다음과 같은 메서드가 있습니다.

방법 설명
void add(Type value)
value컬렉션에 요소를 추가합니다.
boolean remove(Type value)
value컬렉션에서 요소를 제거합니다 . 해당 요소가 있으면
반환true
boolean contains(Type value)
컬렉션에 value요소가 있는지 확인
void clear()
컬렉션을 지우고 모든 요소를 ​​제거합니다.
int size()
컬렉션의 요소 수를 반환합니다.

다음은 집합을 사용하는 예입니다.

사용자가 인사를 하면 작별 인사를 하는 프로그램을 작성해 봅시다. 더 흥미롭게 만들기 위해 프로그램에 여러 언어로 "hello"를 이해할 수 있는 기능을 제공합니다.

암호 메모
HashSet<String> set = new HashSet<String>();

set.add("Hallo");
set.add("Hello");
set.add("Hola");
set.add("Bonjour");
set.add("Ciao");
set.add("Namaste");

Scanner console = new Scanner(System.in);
String str = console.nextLine();

if (set.contains(str))
   System.out.println("Goodbye!");
HashSet요소를 저장하는 개체를 만듭니다 String.


변수 에 다양한 언어로 인사말을 추가합니다 set.




콘솔에서 한 줄을 읽습니다.


문자열이 인사말 세트에 있으면 작별 인사를 합니다.


3. 설정

컬렉션 은 Set일련의 요소를 보유하도록 설계되었습니다. 그래서 Set(집합)이라고 합니다. 이 컬렉션에는 세 가지 기능이 있습니다.

집합에 대한 작업

집합으로 수행할 수 있는 작업은 세 가지뿐입니다. 집합에 요소 추가, 집합에서 요소 제거, 집합에 특정 요소가 포함되어 있는지 확인. 그게 다야.

주문 없음

이 컬렉션의 요소에는 인덱스가 없습니다. 인덱스로 요소를 가져오거나 특정 인덱스의 컬렉션에 값을 쓸 수 없습니다. 세트에는 get()set()메소드가 없습니다.

독특한 요소

집합의 모든 요소는 고유합니다. 목록과 달리 세트에는 요소의 인스턴스가 하나만 포함될 수 있습니다. 개체는 집합에 포함되어 있거나 포함되어 있지 않습니다. 세 번째 옵션은 없습니다. 색상 세트에 검은색을 세 번 추가할 수 없습니다. 거기에 있든 없든 둘 중 하나입니다.

요소 찾기

새 요소를 추가하거나 요소를 제거하거나 집합에 요소가 있는지 여부를 확인할 때 해당 요소에 대한 검색이 메서드에서 수행됩니다. 전달된 요소는 먼저 에 의해 컬렉션의 요소와 비교되고 hashCode()값이 hashCode()일치 에 의해 반환된 경우 에 의해 비교됩니다 equals().



4. 컬렉션 비교: ListvsSet

컬렉션의 두 가지 유형을 비교해 보겠습니다. 한 컬렉션이 다른 List컬렉션 Set보다 유리한 경우와 그 반대의 경우 주요 차이점을 살펴보겠습니다.

장난감을 예로 들어 List와 Set을 비교해 봅시다.

List(목록) 컬렉션은 놀이방 의 벽을 따라 배열된 장난감 세트와 같습니다. 목록 끝에 장난감을 추가할 수 있습니다. 꼭 필요한 경우 중간에 삽입할 수도 있습니다(단, 기존 장난감 중 일부를 이동해야 함).

각 장난감에는 색인이 있습니다. 색인으로 장난감을 참조하고 장난감 번호 7을 장난감 번호 13으로 바꿀 수도 있습니다. 목록에서 장난감 번호 4를 제거할 수 있습니다. 마지막으로 목록에 있는 각 장난감의 인덱스를 알 수 있습니다.

Set(세트) 컬렉션은 바닥 한가운데에 있는 장난감 더미에 가깝습니다. 더미에 장난감을 추가할 수 있고 더미에서 장난감을 제거할 수 있습니다. 그러나 이러한 장난감에는 관련된 고정 인덱스가 없습니다.

또는 자녀의 생일을 위해 장난감을 선택한다고 가정합니다. 먼저, 그가 이미 장난감을 가지고 있는지 생각합니다. 그가 이미 가지고 있는 모든 장난감은 당신이 구매하지 않을 장난감 세트를 형성합니다.

이러한 관점에서 볼 때 "이미 존재하는 장난감" 세트의 장난감 순서는 중요하지 않으며, 생일을 맞은 남자 아이가 특정 장난감을 두 개 가지고 있는지도 중요하지 않습니다. 각 장난감의 순서나 수에는 관심이 없습니다. 당신이 관심을 갖는 것은 세트에 존재하는 각각의 고유한 장난감을 아는 것입니다.

이런 경우에는 Set컬렉션이 필요합니다. 가장 널리 사용되는 구현은 HashSet클래스입니다.