Java HashSet

Σε αυτό το σεμινάριο, θα μάθουμε για την τάξη Java HashSet. Θα μάθουμε για διάφορες μεθόδους και λειτουργίες σετ κατακερματισμού με τη βοήθεια παραδειγμάτων.

Η HashSetκλάση του πλαισίου Java Συλλογών παρέχει τις λειτουργίες της δομής δεδομένων πίνακα κατακερματισμού.

Υλοποιεί τη διεπαφή Set.

Δημιουργία HashSet

Για να δημιουργήσουμε ένα σετ κατακερματισμού, πρέπει java.util.HashSetπρώτα να εισαγάγουμε το πακέτο.

Μόλις εισαγάγουμε το πακέτο, εδώ είναι πώς μπορούμε να δημιουργήσουμε σύνολα κατακερματισμού στην Java.

 // HashSet with 8 capacity and 0.75 load factor HashSet numbers = new HashSet(8, 0.75); 

Εδώ, δημιουργήσαμε ένα σετ κατακερματισμού με το όνομα numbers.

Παρατηρήστε, το νέο μέρος HashSet(8, 0.75). Εδώ, η πρώτη παράμετρος είναι χωρητικότητα και η δεύτερη παράμετρος είναι loadFactor .

  • Χωρητικότητα - Η χωρητικότητα αυτού του σετ κατακερματισμού είναι 8. Δηλαδή, μπορεί να αποθηκεύσει 8 στοιχεία.
  • loadFactor - Ο συντελεστής φόρτωσης αυτού του συνόλου κατακερματισμού είναι 0,6. Αυτό σημαίνει, όποτε το σύνολο κατακερματισμού συμπληρώνεται κατά 60%, τα στοιχεία μετακινούνται σε έναν νέο πίνακα κατακερματισμού διπλάσιου μεγέθους από τον αρχικό πίνακα κατακερματισμού.

Προεπιλεγμένη χωρητικότητα και συντελεστής φόρτωσης

Είναι δυνατό να δημιουργήσετε έναν πίνακα κατακερματισμού χωρίς να ορίσετε τη χωρητικότητα και τον συντελεστή φόρτωσης. Για παράδειγμα,

 // HashSet with default capacity and load factor HashSet numbers1 = new HashSet(); 

Από προεπιλογή,

  • η χωρητικότητα του σετ κατακερματισμού θα είναι 16
  • ο συντελεστής φορτίου θα είναι 0,75

Μέθοδοι του HashSet

Η HashSetτάξη παρέχει διάφορες μεθόδους που μας επιτρέπουν να εκτελούμε διάφορες λειτουργίες στο σετ.

Εισαγωγή στοιχείων στο HashSet

  • add() - εισάγει το καθορισμένο στοιχείο στο σύνολο
  • addAll() - εισάγει όλα τα στοιχεία της καθορισμένης συλλογής στο σύνολο

Για παράδειγμα,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumber = new HashSet(); // Using add() method evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("HashSet: " + evenNumber); HashSet numbers = new HashSet(); // Using addAll() method numbers.addAll(evenNumber); numbers.add(5); System.out.println("New HashSet: " + numbers); ) ) 

Παραγωγή

 HashSet: (2, 4, 6) Νέο 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 numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Calling iterator() method Iterator iterate = numbers.iterator(); System.out.print("HashSet using Iterator: "); // Accessing elements while(iterate.hasNext()) ( System.out.print(iterate.next()); System.out.print(", "); ) ) ) 

Παραγωγή

 HashSet: (2, 5, 6) HashSet χρησιμοποιώντας Iterator: 2, 5, 6, 

Κατάργηση στοιχείων

  • remove() - αφαιρεί το καθορισμένο στοιχείο από το σετ
  • removeAll() - αφαιρεί όλα τα στοιχεία από το σετ

Για παράδειγμα,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("HashSet: " + numbers); // Using remove() method boolean value1 = numbers.remove(5); System.out.println("Is 5 removed? " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("Are all elements removed? " + value2); ) ) 

Παραγωγή

HashSet: (2, 5, 6) Καταργείται το 5; αλήθεια Καταργούνται όλα τα στοιχεία; αληθής

Ορίστε λειτουργίες

Οι διάφορες μέθοδοι της HashSetτάξης μπορούν επίσης να χρησιμοποιηθούν για την εκτέλεση διαφόρων λειτουργιών σετ.

Ένωση συνόλων

Για να πραγματοποιήσουμε την ένωση μεταξύ δύο σετ, μπορούμε να χρησιμοποιήσουμε τη addAll()μέθοδο. Για παράδειγμα,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet1: " + evenNumbers); HashSet numbers = new HashSet(); numbers.add(1); numbers.add(3); System.out.println("HashSet2: " + numbers); // Union of two set numbers.addAll(evenNumbers); System.out.println("Union is: " + 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 primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet1: " + primeNumbers); HashSet evenNumbers = new HashSet(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("HashSet2: " + evenNumbers); // Intersection of two sets evenNumbers.retainAll(primeNumbers); System.out.println("Intersection is: " + evenNumbers); ) ) 

Παραγωγή

 HashSet1: (2, 3) HashSet2: (2, 4) Η διασταύρωση είναι: (2) 

Διαφορά συνόλων

Για να υπολογίσουμε τη διαφορά μεταξύ των δύο συνόλων, μπορούμε να χρησιμοποιήσουμε τη removeAll()μέθοδο. Για παράδειγμα,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("HashSet1: " + primeNumbers); HashSet oddNumbers = new HashSet(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("HashSet2: " + oddNumbers); // Difference between HashSet1 and HashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("Difference : " + primeNumbers); ) ) 

Παραγωγή

 HashSet1: (2, 3, 5) HashSet2: (1, 3, 5) Διαφορά: (2) 

Υποσύνολο

Για να ελέγξουμε εάν ένα σύνολο είναι υποσύνολο άλλου συνόλου ή όχι, μπορούμε να χρησιμοποιήσουμε τη containsAll()μέθοδο. Για παράδειγμα,

 import java.util.HashSet; class Main ( public static void main(String() args) ( HashSet numbers = new HashSet(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("HashSet1: " + numbers); HashSet primeNumbers = new HashSet(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("HashSet2: " + primeNumbers); // Check if primeNumbers is a subset of numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("Is HashSet2 is subset of HashSet1? " + result); ) ) 

Παραγωγή

HashSet1: (1, 2, 3, 4) HashSet2: (2, 3) Είναι το HashSet2 είναι ένα υποσύνολο του HashSet1; αληθής

Άλλες μέθοδοι του HashSet

Μέθοδος Περιγραφή
clone() Δημιουργεί ένα αντίγραφο του HashSet
contains() Ψάχνει HashSetγια το καθορισμένο στοιχείο και επιστρέφει ένα δυαδικό αποτέλεσμα
isEmpty() Ελέγχει εάν HashSetείναι άδειο
size() Επιστρέφει το μέγεθος του HashSet
clear() Αφαιρεί όλα τα στοιχεία από το HashSet

Για να μάθετε περισσότερα σχετικά με τις μεθόδους HashSet, επισκεφθείτε το Java HashSet (επίσημη τεκμηρίωση Java).

Γιατί το HashSet;

Στην Java, HashSetχρησιμοποιείται συνήθως αν πρέπει να έχουμε πρόσβαση σε στοιχεία τυχαία. Αυτό συμβαίνει επειδή τα στοιχεία σε έναν πίνακα κατακερματισμού έχουν πρόσβαση χρησιμοποιώντας κωδικούς κατακερματισμού.

Ο κωδικός κατακερματισμού ενός στοιχείου είναι μια μοναδική ταυτότητα που βοηθά στον προσδιορισμό του στοιχείου σε έναν πίνακα κατακερματισμού.

HashSetδεν μπορεί να περιέχει διπλά στοιχεία. Επομένως, κάθε στοιχείο σετ κατακερματισμού έχει έναν μοναδικό κωδικό κατακερματισμού.

Σημείωση: Το HashSet δεν είναι συγχρονισμένο. Αυτό συμβαίνει εάν πολλά νήματα έχουν πρόσβαση στο σύνολο κατακερματισμού ταυτόχρονα και ένα από τα νήματα τροποποιεί το σύνολο κατακερματισμού. Τότε πρέπει να συγχρονιστεί εξωτερικά.

ενδιαφέροντα άρθρα...