"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > HashSet 탐색: 순서가 지정되지 않은 컬렉션 살펴보기

HashSet 탐색: 순서가 지정되지 않은 컬렉션 살펴보기

2024-11-08에 게시됨
검색:412

Exploring HashSet: A Dive into Unordered Collections

소개

HashSet 클래스는 Java 컬렉션 프레임워크의 일부로, 중복 요소를 허용하지 않는 빠르고 순서가 지정되지 않은 컬렉션을 제공합니다. 이는 HashMap 위에 구축되었습니다. 즉, 동일한 시간 복잡도 이점을 상속하지만 순전히 요소 고유성에만 중점을 둡니다. 이 글에서는 HashSet의 작동 방식, HashSet의 고유한 특징, 다른 컬렉션과 다른 이유를 살펴보겠습니다.


HashSet이란 무엇입니까?

HashSet은 다음과 같습니다.

  • 순서가 지정되지 않음: 요소에 예측 가능한 순서가 없습니다.
  • 고유: 중복된 요소는 무시됩니다.
  • HashMap에 의해 내부적으로 지원: HashMap을 사용하여 요소를 저장하고 값을 삭제하는 동안 에만 초점을 맞춥니다.
  • O(1) 평균 시간 복잡도: 삽입, 삭제, 검색과 같은 작업이 매우 효율적입니다.

1. HashSet 초기화

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));

// Default constructor with default capacity 16
Set set = new HashSet();

설명:

  • 기본 생성자: 초기 용량이 16인 HashSet을 생성합니다.
  • 매개변수화된 생성자: 초기 용량을 지정할 수 있지만 용량은 크기와 동일하지 않습니다. 크기는 세트에 있는 요소의 실제 개수를 나타냅니다.
  • 컬렉션 사용: 목록과 같은 컬렉션에서 HashSet을 생성할 수 있으므로 고유한 요소만 유지됩니다.

2. HashSet에 요소 추가

set.add(1);
set.add(2);
set.add(1); // Duplicate value is ignored
System.out.println(set); // Output -> [1, 2]

설명:

  • add() 메소드는 HashSet에 요소를 삽입합니다.
  • 중복된 요소는 무시됩니다. 1을 두 번 추가하려고 하면 첫 번째 항목만 유지됩니다.

핵심 내용

중복 값을 무시하는 대신 교체해야 하는 경우 HashSet은 올바른 선택이 아닙니다. 이는 요소 고유성을 우선시하기 때문입니다.


3. 크기와 용량 비교

// Parameterized constructor with initial capacity
Set setWithInitialCapacity = new HashSet(5);
System.out.println(setWithInitialCapacity.size()); // Output -> 0

setWithInitialCapacity의 용량이 5이더라도 크기는 0입니다. 크기는 초기 용량이 아니라 세트에 있는 요소 수를 반영하기 때문입니다. 용량은 요소가 추가됨에 따라 조정되는 내부 저장 공간으로 생각하면 됩니다.


4. 컬렉션과 함께 HashSet 사용하기

// Parameterized constructor using a collection
Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3));
System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]

설명:

  • 3개의 요소가 목록(4, 4, 3)에 제공되었지만 중복 값 4는 삭제되어 2개의 요소(3과 4)만 남았습니다.
  • HashSet은 삽입이나 자연 순서를 유지하지 않기 때문에 요소의 순서는 예측할 수 없습니다.

정렬된 요소를 유지해야 하는 경우 요소가 오름차순으로 정렬되도록 하는 TreeSet 사용을 고려하세요.


5. HashSet의 인덱싱 – 가능합니까?

인터뷰에서 일반적인 질문은 HashSet에 있는 요소의 색인을 검색할 수 있는지 여부입니다. 대답은 아니요입니다. 왜냐하면 HashSet은 목록이나 배열과 같은 인덱스 기반 구조가 아닌 해싱 메커니즘을 사용하여 요소를 저장하기 때문입니다.


요점 요약

  1. 순서가 지정되지 않고 고유함: HashSet은 중복을 무시하고 고유한 요소만 유지합니다.
  2. HashMap을 기반으로 구축됨: 요소를 저장하기 위해 내부 HashMap의 키를 사용합니다.
  3. 빠른 작업: 요소 추가, 제거 및 확인에 대한 평균 시간 복잡도는 O(1)입니다.
  4. 용량 대 크기: 용량은 할당된 공간이고 크기는 실제 요소 수입니다.
  5. 인덱싱 없음: 해싱 메커니즘으로 인해 인덱스별로 요소를 검색할 수 없습니다.

HashMap과의 관계

HashSet은 HashMap에 의해 지원되므로 맵의 를 사용하여 요소를 저장하지만 값은 관련이 없습니다. 이것이 바로 HashMap의 키와 마찬가지로 HashSet의 모든 요소가 고유해야 하는 이유입니다.


결론

HashSet은 중복을 방지하는 빠르고 순서 없는 컬렉션이 필요할 때 강력한 도구입니다. 대부분의 작업에 대해 O(1) 시간 복잡도를 제공하지만 정렬 및 인덱싱과 같은 기능은 부족합니다. 개발자의 경우 HashSet이 HashMap과 어떻게 관련되는지 알면 내부 작동 방식을 이해하고 컬렉션 프레임워크를 더 잘 활용하는 데 도움이 됩니다.

다음 게시물에서는 후보자의 컬렉션 개념 지식을 테스트하기 위해 인터뷰에서 자주 묻는 일반적인 인터뷰 질문을 살펴보겠습니다.


관련 게시물

  • 자바 기초

  • 어레이 인터뷰 필수사항

  • Java 메모리 필수사항

즐거운 코딩하세요!

릴리스 선언문 이 기사는 https://dev.to/arshisaxena26/exploring-hashset-a-dive-into-unordered-collections-4ehb?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3