Σε αυτό το σεμινάριο, θα μάθουμε για την τάξη 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 δεν είναι συγχρονισμένο. Αυτό συμβαίνει εάν πολλά νήματα έχουν πρόσβαση στο σύνολο κατακερματισμού ταυτόχρονα και ένα από τα νήματα τροποποιεί το σύνολο κατακερματισμού. Τότε πρέπει να συγχρονιστεί εξωτερικά.