hashset java tutorial with programming examples
Αυτό το σεμινάριο εξηγεί τι είναι το HashSet σε Java, μεθόδους HashSet, πώς να εφαρμόσετε και να επαναλάβετε μέσω αυτού και άλλες σχετικές έννοιες με τη βοήθεια παραδειγμάτων προγραμματισμού:
Το HashSet είναι μια συλλογή που αποθηκεύει αντικείμενα. Το HashSet στην Java υλοποιείται χρησιμοποιώντας την κατηγορία «HashSet» του πακέτου java.util.
Αυτή η τάξη εφαρμόζει μια καθορισμένη διεπαφή. Χρησιμοποιεί HashTable που είναι μια παρουσία HashMap για αποθήκευση.
=> Ρίξτε μια ματιά στον Οδηγό για αρχάριους Java εδώ.
Τι θα μάθετε:
- Java HashSet
- HashSet Vs HashMap
- HashSet Vs TreeSet
- συμπέρασμα
Java HashSet
Μερικά από τα χαρακτηριστικά του HashSet δίνονται παρακάτω:
- Υλοποιεί μια διεπαφή Set που έχει HashTable ως εσωτερική δομή. Το HashTable, με τη σειρά του, είναι μια παρουσία HashMap.
- Δεν διατηρεί τη σειρά των στοιχείων. Τα στοιχεία αποθηκεύονται σε τυχαία σειρά.
- Το HashSet δεν επιτρέπει διπλές τιμές.
- Εφαρμόζει μια διασυνδέσιμη και σειριοποιήσιμη διεπαφή εκτός από τη διεπαφή Set.
- Μπορούμε να έχουμε μηδενικές τιμές στο HashSet.
Ιεραρχία τάξης HashSet
Η ιεραρχία της τάξης HashSet δίνεται παρακάτω:
Όπως φαίνεται στο παραπάνω σχήμα, η κλάση HashSet επεκτείνει την κλάση AbstractSet που με τη σειρά της εφαρμόζει τη διεπαφή Set. Το σετ διεπαφής κληρονομεί τη διεπαφή Συλλογής που με τη σειρά της επεκτείνει την Iterable διεπαφή.
Η έκδοση Java 8 εισήγαγε μια νέα μέθοδο «Διαχωριστής» στο HashSet το οποίο δημιουργεί έναν διαχωριστή αστοχίας που εκτελεί καθυστέρηση δέσμευσης πάνω από τα στοιχεία του HashSet.
Η γενική δήλωση της κλάσης HashSet είναι:
δημόσια τάξη HashSet επεκτείνει το AbstractSet υλοποιεί το σύνολο,
Κλωνοποιήσιμος, σειριοποιήσιμος
Εισαγωγή HashSet
Μπορούμε να συμπεριλάβουμε τη λειτουργία HashSet στο πρόγραμμα χρησιμοποιώντας τη δήλωση εισαγωγής όπως φαίνεται παρακάτω:
εισαγωγή java.util.HashSet;
ή
εισαγωγή java.util. *;
Δήλωση HashSet σε Java
Μπορούμε να δημιουργήσουμε ένα αντικείμενο HashSet στην Java όπως δίνεται παρακάτω:
HashSet h = νέο HashSet ();
Η κλάση HashSet παρέχει τους ακόλουθους κατασκευαστές για τη δημιουργία αντικειμένων.
Πρωτότυπο κατασκευαστή | Περιγραφή | |
---|---|---|
αφαιρώ | Boolean αφαίρεση (αντικείμενο o) | Αφαιρεί το δεδομένο στοιχείο o από το HashSet εάν είναι μέρος του HashSet. |
HashSet () | Προεπιλεγμένος κατασκευαστής για το HashSet | |
HashSet (χωρητικότητα int) | Κατασκευάζει ένα αντικείμενο HashSet με τη δεδομένη «χωρητικότητα». | |
HashSet (χωρητικότητα, float loadFactor) | Κατασκευάζει ένα αντικείμενο HashSet με τις δεδομένες «χωρητικότητα» και «loadFactor». | |
HashSet (Συλλογή γ) | Κατασκευάστε ένα αντικείμενο HashSet από μια δεδομένη συλλογή. |
Όπως φαίνεται στον παραπάνω πίνακα, εκτός από τον προεπιλεγμένο κατασκευαστή, αυτή η κλάση παρέχει επίσης στους κατασκευαστές που λαμβάνουν χωρητικότητα και loadfactor και μια άλλη συλλογή ως επιχειρήματα. Μπορούμε να δημιουργήσουμε τα αντικείμενα αυτής της κλάσης χρησιμοποιώντας οποιονδήποτε από αυτούς τους κατασκευαστές.
Αρχικοποιήστε το HashSet
Ο ακόλουθος κώδικας Java δείχνει τη δήλωση και την αρχικοποίηση του αντικειμένου κλάσης HashSet. Σε αυτό το πρόγραμμα, δημιουργούμε ένα αντικείμενο κλάσης HashSet από μια ArrayList. Αρχικά, δημιουργούμε και αρχικοποιούμε το 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
Ας δούμε ένα λεπτομερές παράδειγμα του HashSet στην Java.
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. Στη συνέχεια, χρησιμοποιώντας τη μέθοδο προσθήκης προσθέτουμε στοιχεία (χρώματα) στο HashSet. Στη συνέχεια, χρησιμοποιούμε έναν επαναληπτικό για να διασχίσουμε το HashSet και να εκτυπώσουμε τα περιεχόμενα.
HashSet Iterator
Στην Java, το HashSet μπορεί να διασχίσει ή να επαναληφθεί με δύο τρόπους όπως συζητείται παρακάτω.
Χωρίς χρήση του Iterator
Εδώ, δεν ορίζουμε έναν επαναληπτικό στο HashSet. Αντ 'αυτού, χρησιμοποιούμε έναν βρόχο forEach. Το παρακάτω πρόγραμμα δείχνει τη διέλευση του HashSet χρησιμοποιώντας έναν βρόχο forEach.
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 + ' '); } } }
Παραγωγή:
Χρησιμοποιώντας το Iterator
Η επόμενη προσέγγιση της επανάληψης είναι η χρήση επανάληψης. Εδώ, ορίζουμε έναν επαναληπτικό για την κατηγορία 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. Παρέχουμε το πρωτότυπο και την περιγραφή για κάθε μέθοδο. Όπως φαίνεται, έχουμε μεθόδους για βασικές λειτουργίες όπως προσθήκη, αφαίρεση, μέγεθος κ.λπ., καθώς και για άλλες μεθόδους για έλεγχο περιεχομένου, κενού, επαναληπτικού, διαχωριστή κ.λπ.
Μέθοδος | Πρωτότυπο μεθόδου | Περιγραφή |
---|---|---|
Προσθήκη | Boolean προσθήκη (E ε) | Προσθέτει το δεδομένο στοιχείο e στο HashSet εάν δεν υπάρχει ήδη. |
Σαφή | Άκυρο καθαρό () | Διαγράφει ή αφαιρεί όλα τα στοιχεία από το HashSet |
κλώνος | Αντικείμενο κλώνου () | Χρησιμοποιείται για να επιστρέψει ένα ρηχό αντίγραφο αυτής της παρουσίας HashSet: τα ίδια τα στοιχεία δεν κλωνοποιούνται. |
περιέχει | Το Boolean περιέχει (αντικείμενο o) | Ελέγχει εάν το HashSet περιέχει το δεδομένο αντικείμενο o και επιστρέφει αληθές εάν ναι. |
είναι άδειο | Boolean isEmpty () | Ελέγχει εάν το HashSet είναι κενό. Επιστρέφει true αν ναι. |
επαναληπτικό | Επαναληπτικό επανάληψης () | Επιστρέφει έναν επαναληπτικό που χρησιμοποιείται για να διασχίσει το HashSet. |
Μέγεθος | Μέγεθος Int () | Επιστρέφει το μέγεθος ή τον αριθμό των στοιχείων που υπάρχουν στο HashSet. |
σχίστης | Διαχωριστής διαχωριστή () | Επιστρέφει το διαχωριστικό αποτυχίας και γρήγορης δέσμευσης για να διασχίσει το 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 σε σειρά
Μπορούμε να χρησιμοποιήσουμε τη μέθοδο toArray () του HashSet για να μετατρέψουμε το δεδομένο 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
Μπορούμε να ταξινομήσουμε ένα HashSet στην Java. Τα στοιχεία HashSet δεν ταξινομούνται αρχικά, καθώς δεν διατηρεί τη σειρά των στοιχείων. Μπορούμε να ακολουθήσουμε δύο προσεγγίσεις για να ταξινομήσουμε ένα HashSet στην Java.
Χρήση της μεθόδου 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); } }
Παραγωγή:
ποια εφαρμογή σάς επιτρέπει να κάνετε λήψη βίντεο στο YouTube
Μετατρέποντας το 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 Vs HashMap
Ο παρακάτω πίνακας δείχνει τις σημαντικές διαφορές μεταξύ HashSet και HashMap.
HashSet | HashMap |
---|---|
Τα αντικείμενα προστίθενται χρησιμοποιώντας τη μέθοδο Προσθήκη (). | Το HashMap χρησιμοποιεί τη μέθοδο put () για να προσθέσει ζεύγη τιμών-κλειδιών. |
Εφαρμογές Ορισμός διεπαφής. | Εφαρμογή διεπαφής χάρτη. |
Αποθηκεύει αντικείμενα ενός συγκεκριμένου τύπου. | Αποθηκεύστε ζεύγη δεδομένων-κλειδιών-τιμών. |
Δεν επιτρέπει διπλές τιμές αντικειμένων. | Επιτρέπει διπλές τιμές αλλά όχι διπλά πλήκτρα. |
Μπορεί να έχει μία μηδενική τιμή. | Επιτρέπει ένα μόνο πλήκτρο null και πολλές τιμές null. |
Χρησιμοποιεί εσωτερικά το HashMap Object για αποθήκευση δεδομένων. | Χρησιμοποιεί τεχνική κατακερματισμού για την αποθήκευση δεδομένων. |
Είναι πιο αργή σε σύγκριση με το HashMap. | Το HashMap είναι πιο γρήγορο. |
HashSet Vs TreeSet
Παρακάτω αναφέρονται οι διαφορές μεταξύ του HashSet και του TreeSet.
HashSet | TreeSet |
---|---|
Έχει περιορισμένη λειτουργικότητα. | Παρέχει λειτουργίες may που προσφέρουν διάφορες λειτουργίες και διευκολύνει τη χρήση του Treeset από το HashSet. |
Δεν διατηρεί την παραγγελία στοιχείων. Αποθηκεύει αντικείμενα σε τυχαία σειρά. | Διατηρεί τη φυσική σειρά των στοιχείων. |
Επιτρέπει μηδενικές τιμές. | Δεν μπορεί να έχει μηδενικές τιμές. |
Δίνει καλύτερη απόδοση καθώς χρειάζεται σταθερός χρόνος για βασικές λειτουργίες. | Προσφέρει κόστος χρόνου καταγραφής για βασικές λειτουργίες. |
Πολύ πιο γρήγορο από το Treeset. | Το Treeset είναι πιο αργό. |
Εφαρμόζεται εσωτερικά χρησιμοποιώντας το HashMap. | Το Treeset υλοποιείται εσωτερικά με τη χρήση πλοήγησης Treemap. |
Χρησιμοποιεί τη μέθοδο ισούται με () για σύγκριση. | Χρησιμοποιεί τη μέθοδο σύγκρισηςTo () για σύγκριση. |
Συχνές Ερωτήσεις
Ε # 1) Πώς λειτουργεί το HashSet στην Java;
Απάντηση: Το HashSet στη Java χρησιμοποιεί το HashMap για να αποθηκεύσει το αντικείμενο. Ένα αντικείμενο HashMap δημιουργείται όταν δημιουργείται ένα αντικείμενο HashSet. Τα στοιχεία ή τα αντικείμενα που εισάγονται στο HashSet αποθηκεύονται ως κλειδιά στο HashMap.
Ε # 2) Παραγγέλθηκε το HashSet σε Java;
Απάντηση: Όχι, δεν έχει παραγγελθεί σε Java. Αποθηκεύει στοιχεία σε τυχαία σειρά.
Ε # 3) Το HashSet επιτρέπει μηδενικό;
Απάντηση: ναι, επιτρέπει μια μηδενική τιμή. Αυτό σημαίνει ότι μόνο ένα στοιχείο ή αντικείμενο μπορεί να είναι μηδενικό και όχι όλα.
Q # 4) Γιατί χρησιμοποιείται το HashSet στην Java;
Απάντηση: Χρησιμοποιείται για την αποθήκευση ζευγών κλειδιών-τιμών στην Java. Είναι παρόμοιο με το HashTable με την εξαίρεση ότι το HashSet δεν είναι συγχρονισμένο και σε αντίθεση με το HashTable επιτρέπει τιμές null και ένα μόνο null κλειδί. Το HashSet δεν έχει παραγγελθεί και μπορεί να χρησιμοποιηθεί για την αποθήκευση μη ταξινομημένων αντικειμένων ή όταν δεν απαιτείται η σειρά των αντικειμένων.
Ε # 5) Είναι συγχρονισμένο το HashSet στην Java;
Απάντηση: Το HashSet δεν είναι συγχρονισμένο σε Java. Επίσης, δεν είναι ασφαλές για νήματα. Αλλά μπορούμε να το κάνουμε συγχρονισμένο χρησιμοποιώντας τη μέθοδο synchronizedSet ().
συμπέρασμα
Το HashSet είναι μια συλλογή που περιέχει αντικείμενα σε τυχαία σειρά. Η κλάση HashSet που εφαρμόζει το HashSet στην Java χρησιμοποιεί εσωτερικά HashTable που εφαρμόζει το HashMap.
Είδαμε τη δήλωση και την προετοιμασία του HashSet μαζί με τις μεθόδους που παρέχονται από την κατηγορία HashSet.
=> Διαβάστε μέσω της σειράς Easy Java Training.
Συνιστώμενη ανάγνωση
- Java Double - Tutorial με παραδείγματα προγραμματισμού
- Java Float Tutorial με παραδείγματα προγραμματισμού
- Java Reverse String: Tutorial με παραδείγματα προγραμματισμού
- TreeSet In Java: Εκμάθηση με παραδείγματα προγραμματισμού
- Εκπαιδευτικό πρόγραμμα JAVA για αρχάριους: 100+ πρακτικά εκπαιδευτικά βίντεο Java
- Το Java String περιέχει () Μέθοδος Εκμάθησης με Παραδείγματα
- TreeMap In Java - Tutorial With Java TreeMap Παραδείγματα
- Jagged Array In Java - Εκμάθηση με παραδείγματα