hashset java tutorial with programming examples
이 튜토리얼은 Java의 HashSet, HashSet 메소드,이를 구현하고 반복하는 방법 및 프로그래밍 예제의 도움으로 기타 관련 개념을 설명합니다.
HashSet은 개체를 저장하는 컬렉션입니다. Java의 HashSet은 java.util 패키지의 'HashSet'클래스를 사용하여 구현됩니다.
이 클래스는 set 인터페이스를 구현합니다. 저장 용 HashMap 인스턴스 인 HashTable을 사용합니다.
=> 여기에서 Java Beginners Guide를 살펴보십시오.
학습 내용 :
자바 HashSet
HashSet의 일부 특성은 다음과 같습니다.
- 내부 구조로 HashTable이있는 Set 인터페이스를 구현합니다. 차례로 HashTable은 HashMap 인스턴스입니다.
- 요소의 순서를 유지하지 않습니다. 요소는 임의의 순서로 저장됩니다.
- HashSet은 중복 값을 허용하지 않습니다.
- Set 인터페이스와 별도로 Cloneable 및 Serializable 인터페이스를 구현합니다.
- HashSet에서 null 값을 가질 수 있습니다.
HashSet 클래스 계층
HashSet 클래스의 계층 구조는 다음과 같습니다.
위의 그림과 같이 HashSet 클래스는 Set 인터페이스를 구현하는 AbstractSet 클래스를 확장합니다. set 인터페이스는 Iterable 인터페이스를 확장하는 Collection 인터페이스를 상속합니다.
Java 8 릴리스는 새로운 방법을 도입했습니다 ‘분쇄기’ HashSet의 요소에 대해 후기 바인딩을 수행하는 Fail-Fast Spliterator를 생성하는 HashSet에서.
HashSet 클래스의 일반적인 선언은 다음과 같습니다.
공용 클래스 HashSet은 AbstractSet을 확장하여 Set을 구현합니다.
복제 가능, 직렬화 가능
HashSet 가져 오기
아래와 같이 import 문을 사용하여 HashSet 기능을 프로그램에 포함 할 수 있습니다.
import java.util.HashSet;
또는
import java.util. *;
Java에서 HashSet 선언
아래와 같이 Java로 HashSet 객체를 만들 수 있습니다.
HashSet h = new HashSet ();
HashSet 클래스는 객체를 생성하기 위해 다음과 같은 생성자를 제공합니다.
생성자 프로토 타입 | 기술 | |
---|---|---|
없애다 | 부울 제거 (Object o) | 지정된 요소 o가 HashSet의 일부인 경우 HashSet에서 제거합니다. |
HashSet () | HashSet의 기본 생성자 | |
HashSet (int 용량) | 주어진 '용량'으로 HashSet 객체를 생성합니다. | |
HashSet (int 용량, float loadFactor) | 주어진 'capacity'및 'loadFactor'로 HashSet 객체를 생성합니다. | |
HashSet (컬렉션 c) | 주어진 컬렉션에서 HashSet 객체를 생성합니다. |
위의 표에 표시된대로 기본 생성자와 별도로이 클래스는 용량 및로드 팩터와 다른 컬렉션을 인수로 사용하는 생성자도 제공합니다. 이러한 생성자를 사용하여이 클래스의 객체를 생성 할 수 있습니다.
HashSet 초기화
다음 Java 코드는 HashSet 클래스 객체의 선언 및 초기화를 보여줍니다. 이 프로그램에서는 ArrayList로부터 HashSet 클래스 객체를 생성합니다. 처음에는 ArrayList를 만들고 초기화 한 다음이 ArrayList를 사용하여 HashSet 객체를 만들고 초기화합니다.
import java.util.*; class Main{ public static void main(String args()){ //declare and initialize ArrayList ArrayList<String> myList=new ArrayList<String>(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); //Create a HashSet and provide ArrayList in its constructor HashSet<String> mySet=new HashSet(myList); mySet.add('Yellow'); //print the HashSet System.out.println('The HashSet contents:'); Iterator<String> i=mySet.iterator(); while(i.hasNext()) { System.out.print(i.next() + ' '); } } }
산출:
HashSet은 Java에서 내부적으로 어떻게 작동합니까?
내부적으로 HashTable을 사용하여 구현됩니다. HashTable은 HashMap의 인스턴스입니다. 그러나 HashMap은 키-값 쌍의 모음입니다. 그렇다면 HashSet을 HashMap에 어떻게 저장합니까?
HashSet의 객체 값은 HashMap의 키입니다.
Java HashSet 예제
Java에서 HashSet의 자세한 예를 살펴 보겠습니다.
import java.util.*; class Main{ public static void main(String args()){ //Create a HashSet and add elements to it HashSet<String> mySet=new HashSet<String>(); mySet.add('Blue'); mySet.add('Green'); mySet.add('Blue'); mySet.add('Green'); mySet.add('Red'); mySet.add('Brown'); mySet.add('Yellow'); //Iterate through the HashSet and print its elements System.out.println('HashSet contents:'); Iterator<String> itr=mySet.iterator(); while(itr.hasNext()){ System.out.print(itr.next() + ' '); } } }
산출:
여기서는 기본 생성자를 사용하여 HashSet 객체를 만듭니다. 그런 다음 add 메서드를 사용하여 요소 (색상)를 HashSet에 추가합니다. 다음으로 반복기를 사용하여 HashSet을 탐색하고 내용을 인쇄합니다.
HashSet 반복자
Java에서 HashSet은 아래에서 설명하는 두 가지 방법으로 순회하거나 반복 할 수 있습니다.
반복자를 사용하지 않고
여기서는 HashSet에 반복자를 정의하지 않습니다. 대신 forEach 루프를 사용합니다. 다음 프로그램은 forEach 루프를 사용한 HashSet 순회를 보여줍니다.
import java.util.HashSet; import java.util.Set; class Main{ public static void main(String() args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use foreach loop to iterate through the HashSet System.out.println('HashSet contents:'); for (String city : cities_HashSet) { System.out.print(city + ' '); } } }
산출:
반복자 사용
반복의 다음 접근 방식은 반복자를 사용하는 것입니다. 여기에서 HashSet 클래스에 대한 반복자를 정의한 다음이를 통과합니다.
다음 프로그램은이 접근 방식을 보여줍니다.
import java.util.HashSet; import java.util.Set; import java.util.Iterator; class Main{ public static void main(String() args) { // Create a HashSet Set<String> cities_HashSet = new HashSet<String>(); //Initialize HashSet with elements cities_HashSet.add('Mumbai'); cities_HashSet.add('Delhi'); cities_HashSet.add('Pune'); cities_HashSet.add('Chennai'); cities_HashSet.add('Bangaluru'); //use iterator to iterate through the HashSet System.out.println('HashSet contents using Iterator:'); Iterator<String> iter = cities_HashSet.iterator(); while(iter.hasNext()){ System.out.print(iter.next() + ' '); } } }
산출:
HashSet 메서드 / API
다음 표는 HashSet 클래스에서 제공하는 메서드를 보여줍니다. 각 방법에 대한 프로토 타입과 설명을 제공했습니다. 보시다시피 add, remove, size 등과 같은 기본 작업을위한 메서드와 내용, 비어 있음, 반복자, 분할 자 등을 확인하는 다른 메서드가 있습니다.
방법 | 방법 프로토 타입 | 기술 |
---|---|---|
더하다 | 부울 더하기 (E e) | 아직 존재하지 않는 경우 주어진 요소 e를 HashSet에 추가합니다. |
맑은 | 무효 클리어 () | HashSet에서 모든 요소를 지우거나 제거합니다. |
복제하다 | 개체 clone () | 이 HashSet 인스턴스의 얕은 복사본을 반환하는 데 사용됩니다. 요소 자체는 복제되지 않습니다. |
포함 | 부울 포함 (Object o) | HashSet에 주어진 객체 o가 포함되어 있는지 확인하고 예인 경우 true를 반환합니다. |
비었다 | 부울 isEmpty () | HashSet이 비어 있는지 확인합니다. 그렇다면 true를 반환합니다. |
반복자 | 반복자 iterator () | HashSet를 순회하는 데 사용되는 반복기를 반환합니다. |
크기 | 정수 크기 () | HashSet에있는 요소의 크기 또는 수를 반환합니다. |
쪼개는 도구 | Spliterator spliterator () | Fail-Fast 및 후기 바인딩 분할기를 반환하여 HashSet을 탐색합니다. 이 메소드는 Java 8에서 도입되었습니다. |
HashSet 클래스에서 제공하는 메서드를 설명 했으므로 이제 클래스의 주요 메서드를 보여주는 예제를 구현해 보겠습니다.
아래 Java 프로그램은이 클래스의 메소드를 보여줍니다.
import java.util.*; class Main{ public static void main(String args()){ //create a HashSet and initialize it HashSet<String> colors_set=new HashSet<String>(); colors_set.add('Red'); colors_set.add('Green'); colors_set.add('Blue'); colors_set.add('Cyan'); System.out.println('Initial HashSet: '+colors_set); //remove() method => remove specified element colors_set.remove('Red'); System.out.println('
HashSet after remove(Red): '+colors_set); //declare and initialize another list HashSet<String> colors_hash=new HashSet<String>(); colors_hash.add('Yellow'); colors_hash.add('Magenta'); //addAll() method => add another HashSet to existing colors_set.addAll(colors_hash); System.out.println('
HashSet after add(colors_hash): '+colors_set); //removeAll() method => remove all elements specified in the argument colors_set.removeAll(colors_hash); System.out.println('
HashSet after removeAll(colors_hash) method: '+colors_set); //removeIf() => remove if given condition is fulfilled colors_set.removeIf(str->str.contains('Green')); System.out.println('
HashSet after removeIf(contains(Green)) method: '+colors_set); //clear() => delete all elements from the HashSet colors_set.clear(); System.out.println('
HashSet after clear() method: '+colors_set); } }
산출:
HashSet을 배열로 변환
HashSet의 toArray () 메서드를 사용하여 주어진 HashSet을 배열로 변환 할 수 있습니다. 배열의 데이터 유형과 크기는 HashSet의 크기와 일치해야합니다.
다음 Java 프로그램은이 변환을 보여줍니다.
import java.util.HashSet; class Main{ public static void main(String() args) { // Create a HashSet & inintialize it HashSet<String> num_HashSet = new HashSet<String>(); num_HashSet.add('One'); num_HashSet.add('Two'); num_HashSet.add('Three'); num_HashSet.add('Four'); // Print HashSet contents System.out.println('HashSet contents: '+ num_HashSet); // Declare an array with size = HashSet size String() numArray = new String(num_HashSet.size()); //use toArray method to convert HashSet to an array num_HashSet.toArray(numArray); // Print Array System.out.println('Array from HashSet: '); for(String val : numArray){ System.out.print(val + ' '); } } }
산출:
HashSet 정렬
Java에서 HashSet을 정렬 할 수 있습니다. HashSet 요소는 요소의 순서를 유지하지 않으므로 원래 정렬되지 않습니다. Java에서 HashSet을 정렬하기 위해 두 가지 접근 방식을 따를 수 있습니다.
Collections.sort () 메서드 사용
이 접근 방식에서는 HashSet을 목록으로 변환합니다. 그런 다음 Collections.sort () 메서드를 사용하여 목록을 정렬합니다. 그러면이 목록이 인쇄됩니다.
import java.util.*; public class Main { public static void main(String args()) { // Create a HashSet & initialize it HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet: ' + cities_HashSet); // Convert HashSet to ArrayList List<String> cities_list = new ArrayList<String>(cities_HashSet); // Use Collections.sort () method to sort the list Collections.sort(cities_list); // Print the Sorted ArrayList (HashSet) System.out.println('Sorted HashSet:'+ cities_list); } }
산출:
답변이있는 PL SQL 인터뷰 질문
HashSet을 TreeSet으로 변환하여
이 방법을 사용하여 HashSet을 TreeSet으로 변환합니다. TreeSet은 요소의 순서를 유지합니다. 따라서 HashSet이 TreeSet으로 변환되면 요소가 순서대로 배치됩니다.
다음 Java 프로그램은이 변환을 표시하여 HashSet을 정렬합니다.
import java.util.*; public class Main { public static void main(String args()) { // Create and initialize a HashSet HashSet<String> cities_HashSet = new HashSet<String>(); cities_HashSet.add('Pune'); cities_HashSet.add('Mumbai'); cities_HashSet.add('Bangaluru'); cities_HashSet.add('Hyderabad'); System.out.println('Original HashSet:'+ cities_HashSet); // Sort HashSet using TreeSet TreeSet<String> treeSet = new TreeSet<String>(cities_HashSet); // Print the sorted HashSet System.out.println('HashSet sorted using using TreeSet:' + treeSet); } }
산출:
이제 HashSet과 HashMap의 차이점에 대해 설명하겠습니다. 또한 HashSet과 TreeSet의 차이점에 대해서도 설명합니다.
HashSet 대 HashMap
다음 표는 HashSet과 HashMap의 주요 차이점을 보여줍니다.
HashSet | HashMap |
---|---|
개체는 Add () 메서드를 사용하여 추가됩니다. | HashMap은 put () 메서드를 사용하여 키-값 쌍을 추가합니다. |
Set 인터페이스를 구현합니다. | Map 인터페이스를 구현합니다. |
특정 유형의 개체를 저장합니다. | 데이터의 키-값 쌍을 저장합니다. |
개체의 중복 값을 허용하지 않습니다. | 중복 값은 허용하지만 중복 키는 허용하지 않습니다. |
단일 널값을 가질 수 있습니다. | 단일 null 키 및 여러 null 값을 허용합니다. |
내부적으로 데이터를 저장하기 위해 HashMap 개체를 사용합니다. | 데이터 저장을 위해 해싱 기술을 사용합니다. |
HashMap에 비해 느립니다. | HashMap이 더 빠릅니다. |
HashSet 대 TreeSet
다음은 HashSet과 TreeSet의 차이점입니다.
HashSet | TreeSet |
---|---|
제한된 기능이 있습니다. | 다양한 오퍼레이션을 제공하고 HashSet보다 Treeset을 쉽게 사용할 수있는 기능을 제공합니다. |
요소 순서를 유지하지 않습니다. 임의의 순서로 개체를 저장합니다. | 요소의 자연스러운 순서를 유지합니다. |
null 값을 허용합니다. | null 값을 가질 수 없습니다. |
기본 작업에 일정한 시간이 걸리므로 더 나은 성능을 제공합니다. | 기본 작업에 대한 log n 시간 비용을 제공합니다. |
Treeset보다 훨씬 빠릅니다. | 트리 셋이 느립니다. |
HashMap을 사용하여 내부적으로 구현되었습니다. | 트리 세트는 탐색 가능한 트리 맵을 사용하여 내부적으로 구현됩니다. |
비교를 위해 equals () 메소드를 사용합니다. | 비교를 위해 compareTo () 메서드를 사용합니다. |
자주 묻는 질문
Q # 1) HashSet은 Java에서 어떻게 작동합니까?
대답: Java의 HashSet은 HashMap을 사용하여 객체를 저장합니다. HashSet 객체가 생성 될 때 하나의 HashMap 객체가 생성됩니다. HashSet에 입력 된 요소 또는 개체는 HashMap에 키로 저장됩니다.
Q # 2) HashSet은 Java로 주문됩니까?
대답: 아니오, Java로 주문되지 않습니다. 요소를 임의의 순서로 저장합니다.
Q # 3) HashSet은 null을 허용합니까?
대답: 예, 단일 null 값을 허용합니다. 즉, 단일 요소 또는 개체 만 null 일 수 있으며 전부는 아닙니다.
Q # 4) Java에서 HashSet이 사용되는 이유는 무엇입니까?
대답: Java에서 키-값 쌍을 저장하는 데 사용됩니다. HashSet이 동기화되지 않는다는 점을 제외하면 HashTable과 유사하며 HashTable과 달리 널 값과 단일 널 키를 허용합니다. HashSet은 정렬되지 않으며 정렬되지 않은 개체를 저장하거나 개체의 순서가 필요하지 않을 때 사용할 수 있습니다.
Q # 5) HashSet은 Java에서 동기화됩니까?
대답: HashSet은 Java에서 동기화되지 않습니다. 또한 스레드로부터 안전하지 않습니다. 하지만 동기화 된 설정 () 메서드를 사용하여 동기화 할 수 있습니다.
결론
HashSet은 임의의 순서로 된 개체를 포함하는 컬렉션입니다. Java에서 HashSet을 구현하는 HashSet 클래스는 내부적으로 HashMap을 구현 한 HashTable을 사용합니다.
HashSet 클래스에서 제공하는 메서드와 함께 HashSet의 선언 및 초기화를 확인했습니다.