English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 가이드

Java 흐름 제어

Java 배열

Java 지향형 객체(I)

Java 지향형 객체(II)

Java 지향형 객체(III)

Java 예외 처리

Java 목록(List)

Java Queue(큐)

Java Map 집합

Java Set 집합

Java 입력/출력(I/O)

Java Reader/Writer

Java 다른 주제

Java HashSet 클래스

이 튜토리얼에서는 Java HashSet 클래스를 배웁니다. 다양한 해시 셋 메서드와 작업을 예제를 통해 배웁니다.

Java Collections 프레임워크의 HashSet 클래스는 해시 테이블 데이터 구조의 기능을 제공합니다.

그것은Set 인터페이스입니다.

해시 셋을 생성하다

해시 셋을 생성하려면 먼저 java.util.HashSet 패키지를 임포트해야 합니다.

또한 패키지를 임포트하면 Java에서 해시 셋을 생성할 수 있습니다.

//가 있습니다.8개의 용량과 0.75부하 인덱스를 가진 HashSet
HashSet<Integer> numbers = new HashSet<>(8, 0.75);

여기서는 names이라는 이름의 해시 셋을 생성했습니다.

주의할 것은 새로운 HashSet<>(8, 0.75) 여기서, 첫 번째 파라미터는용량이고 두 번째 파라미터는부하 인덱스입니다.

  • capacity -이 해시 셋의 용량은8이는 그것이 저장할 수 있는8개의 요소.

  • loadFactor - 이 해시 셋의 부하 인덱스는 0입니다.6이는 우리의 해시 셋이 채워지면60%,요소는 원래 해시 테이블의 크기가 두 배인 새 해시 테이블로 이동합니다.

기본 용량과 부하 인덱스

용량과 부하 인덱스를 정의하지 않고 해시 테이블을 생성하는 것은 가능합니다. 예를 들어,

//가 기본 용량과 부하 인덱스를 가진 HashSet
HashSet<Integer> numbers1 = new HashSet<>();

기본적으로,

  • 해시 집합의 용량은 될 것입니다 16

  • 부하 계수는 0이 될 것입니다.75

HashSet 메서드

HashSet 클래스는 다양한 메서드를 제공하여 집합에 다양한 작업을 수행할 수 있습니다.

요소를 HashSet에 삽입합니다

  • add() - 지정된 요소를 집합에 삽입합니다

  • addAll() - 지정된 집합의 모든 요소를 집합에 삽입합니다

예를 들어,

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> evenNumber = new HashSet<>();
        // add() 메서드 사용
        evenNumber.add(2);
        evenNumber.add(4);
        evenNumber.add(6);
        System.out.println("HashSet: ") + evenNumber);
        HashSet<Integer> numbers = new HashSet<>();
        
        // addAll() 메서드 사용
        numbers.addAll(evenNumber);
        numbers.add(5);
        System.out.println("New HashSet: ") + numbers);
    }
}

출력 결과

HashSet: [2, 4, 6]
New HashSet: [2, 4, 5, 6]

HashSet 요소 접근

HashSet의 요소를 접근하려면 iterator() 메서드를 사용할 수 있습니다. 이 메서드를 사용하려면 java.util.Iterator 패키지를 가져와야 합니다. 예를 들어,

import java.util.HashSet;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("HashSet: ") + numbers);
        // iterator() 메서드 호출
        Iterator<Integer> iterate = numbers.iterator();
        System.out.print("Iterator의 HashSet: ")
        //요소 접근
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
    }
}

출력 결과

HashSet: [2, 5, 6]
Iterator의 HashSet 사용 2, 5, 6,

요소 제거

  • remove() - 지정된 요소를 집합에서 제거합니다

  • removeAll() - 모든 요소를 집합에서 제거합니다

예를 들어,

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(2);
        numbers.add(5);
        numbers.add(6);
        System.out.println("HashSet: ") + numbers);
        //remove() 메서드 사용
        boolean value1 = numbers.remove(5);
        System.out.println("값5삭제되었나요? " + value1);
        boolean value2 = numbers.removeAll(numbers);
        System.out.println("모든 요소가 제거되었나요? " + value2);
    }
}

출력 결과

HashSet: [2, 5, 6]
값5삭제되었나요? true
모든 요소가 제거되었나요? true

Set 작업 메서드

HashSet 클래스의 다양한 메서드는 다양한 set 작업을 수행할 수 있습니다.

Set 집합의 합집합

두 집합 간의 합집합을 수행하려면 addAll() 메서드를 사용할 수 있습니다. 예를 들어

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("HashSet1: " + System.out.println("교집합: ",
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(3);
        System.out.println("HashSet2: " + numbers);
        //집합의 합집합
        numbers.addAll(evenNumbers);
        System.out.println("합집합은: ", + numbers);
    }
}

출력 결과

HashSet1: [2, 4]
HashSet2: [1, 3]
합집합은: [1, 2, 3, 4]

Set 집합의 교집합

두 집합 간의 교집합을 수행하려면 retainAll() 메서드를 사용할 수 있습니다. 예를 들어

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("HashSet1: " + primeNumbers);
        HashSet<Integer> evenNumbers = new HashSet<>();
        evenNumbers.add(2);
        evenNumbers.add(4);
        System.out.println("HashSet2: " + System.out.println("교집합: ",
        //집합의 교집합
        evenNumbers.retainAll(primeNumbers);
        evenNumbers); + System.out.println("교집합: ",
    }
}

출력 결과

HashSet1: [2, 3]
HashSet2: [2, 4]
교집합: [2]

Set 집합의 차집합

두 집합 간의 차집합을 계산하려면 removeAll() 메서드를 사용할 수 있습니다. 예를 들어,

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        primeNumbers.add(5);
        System.out.println("HashSet1: " + primeNumbers);
        HashSet<Integer> oddNumbers = new HashSet<>();
        oddNumbers.add(1);
        oddNumbers.add(3);
        oddNumbers.add(5);
        System.out.println("HashSet2: " + oddNumbers);
        //HashSet1HashSet와2두 집합 간의 차집합
        primeNumbers.removeAll(oddNumbers);
        System.out.println("차집합: ", + primeNumbers);
    }
}

출력 결과

HashSet1: [2, 3, 5]
HashSet2: [1, 3, 5]
차집합: [2]

Set 집합의 부집

하나의 집합이 다른 집합의 부집인지 확인하려면 containsAll() 메서드를 사용할 수 있습니다. 예를 들어,

import java.util.HashSet;
class Main {
    public static void main(String[] args) {
        HashSet<Integer> numbers = new HashSet<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        System.out.println("HashSet1: " + numbers);
        HashSet<Integer> primeNumbers = new HashSet<>();
        primeNumbers.add(2);
        primeNumbers.add(3);
        System.out.println("HashSet2: " + primeNumbers);
        //primeNumbers가 numbers의 부집인지 확인합니다
        boolean result = numbers.containsAll(primeNumbers);
        System.out.println("HashSet2HashSet입니다1의 부집이에요? " + result);
    }
}

출력 결과

HashSet1: [1, 2, 3, 4]
HashSet2: [2, 3]
HashSet2HashSet입니다1서브셋인가요? true

HashSet의 다른 메서드

메서드설명
clone()HashSet 복사본을 생성합니다
contains()HashSet에서 지정된 요소를 검색하고 부울 결과를 반환합니다
isEmpty()HashSet이 비어 있는지 확인합니다
size()HashSet의 크기를 반환합니다
clear()HashSet에서 모든 요소를 제거합니다

왜 HashSet을 선택합니까?

Java에서는 요소를 랜덤으로 접근해야 한다면 일반적으로 HashSet을 사용합니다. 이는 해시 테이블의 요소가 해시 코드를 사용하여 접근된다는 것입니다.

요소의 hashcode는 요소를 식별하는 유일한 표识자로, 해시 테이블의 요소를 식별하는 데 도움이 됩니다.

HashSet은 중복된 요소를 포함할 수 없습니다. 따라서 각 해시 셋 요소는 독특한 hashcode를 가집니다.

주의: HashSet은 동기화되지 않습니다. 즉, 여러 스레드가 동시에 해시 셋에 접근하고 하나의 스레드가 해시 셋을 수정하면, 외부 동기화가 필요합니다.