English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 튜토리얼에서는 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 클래스는 다양한 메서드를 제공하여 집합에 다양한 작업을 수행할 수 있습니다.
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의 요소를 접근하려면 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
HashSet 클래스의 다양한 메서드는 다양한 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]
두 집합 간의 교집합을 수행하려면 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]
두 집합 간의 차집합을 계산하려면 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]
하나의 집합이 다른 집합의 부집인지 확인하려면 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
메서드 | 설명 |
---|---|
clone() | HashSet 복사본을 생성합니다 |
contains() | HashSet에서 지정된 요소를 검색하고 부울 결과를 반환합니다 |
isEmpty() | HashSet이 비어 있는지 확인합니다 |
size() | HashSet의 크기를 반환합니다 |
clear() | HashSet에서 모든 요소를 제거합니다 |
Java에서는 요소를 랜덤으로 접근해야 한다면 일반적으로 HashSet을 사용합니다. 이는 해시 테이블의 요소가 해시 코드를 사용하여 접근된다는 것입니다.
요소의 hashcode는 요소를 식별하는 유일한 표识자로, 해시 테이블의 요소를 식별하는 데 도움이 됩니다.
HashSet은 중복된 요소를 포함할 수 없습니다. 따라서 각 해시 셋 요소는 독특한 hashcode를 가집니다.
주의: HashSet은 동기화되지 않습니다. 즉, 여러 스레드가 동시에 해시 셋에 접근하고 하나의 스레드가 해시 셋을 수정하면, 외부 동기화가 필요합니다.