what is hashmap java
Αυτός ο οδηγός Java HashMap εξηγεί τι είναι το HashMap στην Java και πώς να το χρησιμοποιήσετε. Περιλαμβάνει τον τρόπο δήλωσης, αρχικοποίησης, επανάληψης, εφαρμογής και εκτύπωσης HashMap:
Το HashMap στην Java είναι μια συλλογή που βασίζεται στο χάρτη και αποτελείται από ζεύγη τιμών-κλειδιών. Ένα HashMap δηλώνεται με ή. Μπορείτε να αποκτήσετε πρόσβαση σε ένα στοιχείο HashMap χρησιμοποιώντας ένα Κλειδί, δηλαδή πρέπει να γνωρίζουμε το κλειδί για πρόσβαση στο στοιχείο HashMap.
Ένα HashMap χρησιμοποιεί μια τεχνική που ονομάζεται 'Hashing'. Στο κατακερματισμό, μια μεγαλύτερη συμβολοσειρά μετατρέπεται σε μικρότερη συμβολοσειρά εφαρμόζοντας κάποιο αλγόριθμο ή «συνάρτηση κατακερματισμού». Μια συμβολοσειρά μετατρέπεται σε μικρότερη συμβολοσειρά καθώς βοηθά στην αναζήτηση που είναι ταχύτερη. Χρησιμοποιείται επίσης για αποτελεσματική ευρετηρίαση.
=> Επισκεφτείτε εδώ για την αποκλειστική σειρά εκπαιδευτικών εκμάθησης Java.
Τι θα μάθετε:
- HashMap στην Java
- Πώς να δηλώσετε ένα HashMap στην Java;
- Δημιουργήστε ένα HashMap
- Πώς να αρχικοποιήσετε το κατακερματισμένο χάρτη;
- Πώς λειτουργεί ένα HashMap εσωτερικά;
- Πώς να επαναλάβετε ένα HashMap;
- Εκτύπωση χάρτη κατακερματισμού
- Κατασκευαστής HashMap / Μέθοδοι στην Java
- Υλοποίηση Hashmap
- Ταξινόμηση HashMap στην Java
- Ταυτόχρονο HashMap στην Ιάβα
- Java Map Vs HashMap
- συμπέρασμα
HashMap στην Java
Ένα HashMap είναι παρόμοιο με το HashTable με τη διαφορά ότι το HashMap δεν είναι συγχρονισμένο και επιτρέπει μηδενικές τιμές για το κλειδί και την τιμή.
Μερικά από τα σημαντικά χαρακτηριστικά του HashMap δίνονται παρακάτω:
- Το HashMap εφαρμόζεται σε Java στην τάξη 'Hashmap' που είναι μέρος του πακέτου java.util.
- Η κλάση HashMap κληρονομεί από την κλάση 'AbstractMap' που εφαρμόζει εν μέρει τη διεπαφή χάρτη.
- Το HashMap εφαρμόζει επίσης διασυνδέσεις «cloneable» και «serializable».
- Το HashMap επιτρέπει διπλές τιμές, αλλά δεν επιτρέπει διπλότυπα κλειδιά. Το HashMap επιτρέπει επίσης πολλές μηδενικές τιμές, αλλά ένα μηδενικό κλειδί μπορεί να είναι μόνο μία.
- Το HashMap δεν είναι συγχρονισμένο και επίσης δεν εγγυάται τη σειρά των στοιχείων.
- Η κλάση Java HashMap έχει αρχική χωρητικότητα 16 και ο προεπιλεγμένος (αρχικός) συντελεστής φόρτωσης είναι 0,75.
Πώς να δηλώσετε ένα HashMap στην Java;
Ένα HashMap στην Java είναι μέρος του πακέτου java.util. Επομένως, εάν χρειαστεί να χρησιμοποιήσουμε το HashMap στον κώδικά μας, πρέπει πρώτα να εισαγάγουμε την κλάση εφαρμογής χρησιμοποιώντας μία από τις ακόλουθες δηλώσεις:
import java.util.*;
Ή
import java.util.HashMap;
Η γενική δήλωση της τάξης HashMap είναι:
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
Εδώ, K => τύπος κλειδιών που υπάρχουν στο χάρτη
V => τύπος τιμών που αντιστοιχίζονται στα πλήκτρα του χάρτη
Δημιουργήστε ένα HashMap
Ένα HashMap στην Java μπορεί να δημιουργηθεί ως εξής:
import java.util.HashMap; HashMap cities_map = new HashMap ();
Η παραπάνω δήλωση περιλαμβάνει πρώτα την κλάση HashMap στην Java. Στη συνέχεια, στην επόμενη δήλωση, δημιουργούμε ένα HashMap που ονομάζεται «city_map» με τον τύπο κλειδιού ως ακέραιο και τιμές ως συμβολοσειρά.
Μόλις δημιουργηθεί το HashMap, πρέπει να το αρχικοποιήσουμε με τιμές.
Πώς να αρχικοποιήσετε το κατακερματισμένο χάρτη;
Μπορούμε να αρχικοποιήσουμε το HashMap χρησιμοποιώντας τη μέθοδο put βάζοντας μερικές τιμές στο χάρτη.
Το παρακάτω πρόγραμμα δείχνει την αρχικοποίηση του HashMap στην Java.
import java.util.*; class Main{ public static void main(String args()){ //create a HashMap and print HashMap colorsMap=new HashMap(); System.out.println('Initial Map: '+colorsMap); //put some initial values into it using put method colorsMap.put(100,'Red'); colorsMap.put(101,'Green'); colorsMap.put(102,'Blue'); //print the HashMap System.out.println('After adding elements:'); for(Map.Entry m:colorsMap.entrySet()){ System.out.println(m.getKey()+' '+m.getValue()); } } }
Παραγωγή:
Αρχικός χάρτης: {}
Μετά την προσθήκη στοιχείων:
100 Δίκτυο
101 Πράσινο
102 Μπλε
Πώς λειτουργεί ένα HashMap εσωτερικά;
Γνωρίζουμε ότι το HashMap είναι μια συλλογή ζευγών κλειδιού-τιμής και χρησιμοποιεί μια τεχνική που ονομάζεται «Hashing». Εσωτερικά, το HashMap είναι ένας πίνακας κόμβων. Το HashMap χρησιμοποιεί πίνακες και LinkedList για την αποθήκευση ζευγών κλειδιών-τιμών.
Δίνεται παρακάτω μια δομή ενός κόμβου του HashMap που αναπαριστάται μέσω προγραμματισμού ως τάξη.
Όπως φαίνεται από την αναπαράσταση κόμβου παραπάνω, ένας κόμβος έχει δομή παρόμοια με έναν συνδεδεμένο κόμβο λίστας. Ένας πίνακας αυτών των κόμβων ονομάζεται Bucket. Κάθε κάδος μπορεί να μην έχει την ίδια χωρητικότητα και μπορεί να έχει και περισσότερους από έναν κόμβους.
Η απόδοση του HashMap επηρεάζεται από δύο παραμέτρους:
(i) Αρχική ικανότητα: Η χωρητικότητα ορίζεται ως ο αριθμός των κάδων στο HashMap. Η αρχική χωρητικότητα ορίζεται ως η χωρητικότητα του αντικειμένου HashMap όταν δημιουργείται. Η χωρητικότητα του HashMap πολλαπλασιάζεται πάντα με 2.
(ii) LoadFactor: LoadFactor είναι η παράμετρος που μετράει κατά την αναδιάταξη - αυξάνοντας την χωρητικότητα, θα γίνει.
Σημειώστε ότι εάν η χωρητικότητα είναι υψηλή, ο συντελεστής φόρτωσης θα είναι μικρός, καθώς δεν θα απαιτείται επαναπροσδιορισμός. Ομοίως, όταν η χωρητικότητα είναι χαμηλή, ο συντελεστής φόρτωσης θα είναι υψηλός, καθώς θα πρέπει να κάνουμε επανασχηματισμό συχνά. Επομένως, πρέπει να προσέξουμε να επιλέξουμε προσεκτικά αυτούς τους δύο παράγοντες για να σχεδιάσουμε ένα αποτελεσματικό hashMap.
Πώς να επαναλάβετε ένα HashMap;
Το HashMap πρέπει να διασταυρωθεί για να χειριστεί ή να εκτυπώσει τα ζεύγη τιμών-κλειδιών.
Υπάρχουν δύο τρόποι με τους οποίους μπορούμε να διασχίσουμε ή να επαναλάβουμε μέσω του HashMap.
- Χρήση για βρόχο
- Χρησιμοποιώντας το loop loop και τον επαναληπτικό.
Το παρακάτω πρόγραμμα Java δείχνει την εφαρμογή και των δύο αυτών μεθόδων.
Αρχικά, ανακτούμε το σύνολο καταχωρήσεων από το HashMap χρησιμοποιώντας τη μέθοδο entrySet και μετά διασχίζουμε το σύνολο χρησιμοποιώντας το loop. Στη συνέχεια εκτυπώνουμε τα ζεύγη κλειδιών-τιμών χρησιμοποιώντας τις μεθόδους getKey () και getValue () αντίστοιχα.
Για να διασχίσουμε το HashMap χρησιμοποιώντας ένα loop loop, πρώτα ορίσαμε έναν επαναληπτικό για το HashMap και, στη συνέχεια, έχουμε πρόσβαση στα ζεύγη τιμών-κλειδιών χρησιμοποιώντας το iterator.
import java.util.*; public class Main{ public static void main(String () args) { //create a HashMap and initialize it HashMap cities_map = new HashMap(); cities_map.put(10, 'MUM'); cities_map.put(1, 'DL'); cities_map.put(20, 'PUN'); cities_map.put(7, 'GOA'); cities_map.put(3, 'HYD'); //print using for loop System.out.println('HashMap using for Loop:'); System.out.println(' KEY VALUE'); for (Map.Entry mapSet : cities_map.entrySet()) { System.out.println(' '+mapSet.getKey() + ' ' + mapSet.getValue()); } //print using while loop with iterator System.out.println('HashMap using while Loop:'); System.out.println(' KEY VALUE'); Iterator iterator = cities_map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry mapSet2 = (Map.Entry) iterator.next(); System.out.println(' '+mapSet2.getKey() + ' ' + mapSet2.getValue()); } } }
Παραγωγή:
HashMap χρησιμοποιώντας για Loop:
ΒΑΣΙΚΗ ΑΞΙΑ
1 DL
3 ΜΑΚΡΟ
20 ΠΑΝ
7 GOA
10 μαμά
HashMap χρησιμοποιώντας while Loop:
ΒΑΣΙΚΗ ΑΞΙΑ
1 DL
3 ΜΑΚΡΟ
20 ΠΑΝ
7 GOA
10 μαμά
Εκτύπωση χάρτη κατακερματισμού
Ας δούμε ένα άλλο παράδειγμα εκτύπωσης του hashMap χρησιμοποιώντας το βρόχο πρόσθιας προβολής που φαίνεται στο παρακάτω πρόγραμμα.
import java.util.HashMap; public class Main { public static void main(String() args) { // create a HashMap and initialize HashMap colors = new HashMap(); colors.put('Red', 1); colors.put('Orange', 5); colors.put('Magenta', 8); //print the HashMap System.out.println('HashMap contents:'); System.out.println(' KEY VALUE'); for (String i : colors.keySet()) { System.out.println(' ' + i + ' ' + colors.get(i)); } } }
Παραγωγή:
Περιεχόμενα HashMap:
ΒΑΣΙΚΗ ΑΞΙΑ
Δίκτυο 1
Ματζέντα 8
Πορτοκαλί 5
Κατασκευαστής HashMap / Μέθοδοι στην Java
Οι παρακάτω πίνακες δείχνουν τους κατασκευαστές και τις μεθόδους που παρέχονται από την τάξη HashMap στην Java.
Κατασκευαστές
Πρωτότυπο κατασκευαστή | Περιγραφή | |
---|---|---|
βάλτε όλα | void putAll (χάρτης χάρτη) | Εισάγει καθορισμένα στοιχεία «χάρτη» στο HashMap. |
HashMap () | Προεπιλεγμένος κατασκευαστής. | |
HashMap (Χάρτης m) | Δημιουργεί ένα νέο HashMap από το δεδομένο αντικείμενο χάρτη m. | |
HashMap (χωρητικότητα int) | Δημιουργεί ένα νέο HashMap με την αρχική χωρητικότητα που δίνεται από το όρισμα «ικανότητα». | |
HashMap (χωρητικότητα, float loadFactor) | Δημιουργεί ένα νέο HashMap χρησιμοποιώντας τις τιμές χωρητικότητας και loadFactor που παρέχονται από τον κατασκευαστή. |
Μέθοδοι
Μέθοδος | Πρωτότυπο μεθόδου | Περιγραφή |
---|---|---|
Σαφή | κενό καθαρό () | Διαγράφει όλες τις αντιστοιχίσεις στο HashMap |
είναι άδειο | boolean isEmpty () | Ελέγχει εάν το HashMap είναι κενό. Επιστρέφει true αν ναι. |
κλώνος | Αντικείμενο κλώνου () | Επιστρέφει ένα ρηχό αντίγραφο χωρίς κλωνοποίηση των αντιστοιχίσεων κλειδιών και τιμών στο HashMap. |
είσοδοςSet | Ορισμός καταχώρησηςSet () | Επιστρέφει αντιστοιχίσεις στο HashMap ως συλλογή |
κλειδί | Ορισμός keySet () | Επιστρέφει ένα σύνολο πλήκτρων στο HashMap. |
βάζω | V put (πλήκτρο αντικειμένου, τιμή αντικειμένου) | Εισάγει μια καταχώριση κλειδιού-τιμής στο HashMap. |
putIfAbsent | V putIfAbsent (πλήκτρο K, τιμή V) | Εισάγει δεδομένο ζεύγος κλειδιού-τιμής στο HashMap εάν δεν υπάρχει ήδη. |
αφαιρώ | Αφαίρεση V (κλειδί αντικειμένου) | Διαγράψτε μια καταχώριση από το HashMap για το δεδομένο κλειδί. |
αφαιρώ | boolean remove (κλειδί αντικειμένου, τιμή αντικειμένου) | Διαγράφει το δεδομένο ζεύγος κλειδιού-τιμής από το HashMap. |
υπολογίζω | Υπολογισμός V (πλήκτρο K, επαναλειτουργία δύο λειτουργιών) | Υπολογίζει τη χαρτογράφηση χρησιμοποιώντας το «remappingfunction» για το δεδομένο κλειδί και την τρέχουσα τιμή ή την τιμή null. |
Μέθοδος | Πρωτότυπο μεθόδου | Περιγραφή |
computeIfAbsent | V computeIfAbsent (πλήκτρο K, Λειτουργία χαρτογράφησης Λειτουργία) | Υπολογίζει τη χαρτογράφηση χρησιμοποιώντας το 'mappingFunction' και εισάγει ζεύγη τιμών-κλειδιών εάν δεν υπάρχει ήδη ή είναι μηδενική. |
computeIfPresent | V computeIfPresent (πλήκτρο K, BiFunction remappingFunction) | Υπολογίζει μια νέα αντιστοίχιση χρησιμοποιώντας το «remappingFunction» που δίνει το κλειδί εάν το κλειδί είναι ήδη παρόν και μη-μηδενικό. |
περιέχει τιμή | boolean περιέχειValue (τιμή αντικειμένου) | Ελέγχει εάν η δεδομένη τιμή υπάρχει στο HashMap και επιστρέφει αληθές εάν ναι. |
περιέχει Κέι | boolean περιέχειKey (κλειδί αντικειμένου) | Ελέγχει εάν το δεδομένο κλειδί υπάρχει στο HashMap και επιστρέφει αληθές εάν ναι. |
ισούται | boolean ισούται με (αντικείμενο o) | Συγκρίνει δεδομένο αντικείμενο με το HashMap. |
για κάθε | void forEach (δράση BiConsumer) | Εκτελεί «δράση» για καθεμία από τις καταχωρήσεις στο HashMap. |
παίρνω | V get (πλήκτρο αντικειμένου) | Επιστρέφει το αντικείμενο που περιέχει το δεδομένο κλειδί με τη σχετική τιμή. |
getOrDefault | V getOrDefault (Πλήκτρο αντικειμένου, V defaultValue) | Επιστρέφει την τιμή στην οποία αντιστοιχίζεται το δεδομένο κλειδί. Εάν δεν αντιστοιχιστεί, επιστρέφει την προεπιλεγμένη τιμή. |
είναι άδειο | boolean isEmpty () | Ελέγχει εάν το HashMap είναι κενό. |
πηγαίνω | V συγχώνευση (πλήκτρο K, τιμή V, επαναλειτουργία δύο λειτουργιών) | Ελέγχει εάν το δεδομένο κλειδί είναι μηδενικό ή δεν σχετίζεται με την τιμή και, στη συνέχεια, το συσχετίζει με μη μηδενική τιμή χρησιμοποιώντας το remappingFunction. |
αντικαθιστώ | Αντικατάσταση V (πλήκτρο K, τιμή V) | Αντικαθιστά τη δεδομένη τιμή για το καθορισμένο κλειδί. |
αντικαθιστώ | boolean αντικατάσταση (πλήκτρο K, V oldValue, V newValue) | Αντικαθιστά την παλιά τιμή του δεδομένου κλειδιού με τη νέα τιμή |
αντικαταστήστε Όλα | void ReplAll (λειτουργία BiFunction) | Εκτελεί τη δεδομένη συνάρτηση και αντικαθιστά όλες τις τιμές στο HashMap με το αποτέλεσμα της συνάρτησης. |
αξίες | Τιμές συλλογής () | Επιστρέφει τη συλλογή τιμών που υπάρχουν στο HashMap. |
Μέγεθος | int μέγεθος () | Επιστρέφει το μέγεθος του αριθμού καταχωρήσεων στο HashMap. |
Υλοποίηση Hashmap
Στη συνέχεια, θα εφαρμόσουμε τις περισσότερες από αυτές τις λειτουργίες σε ένα πρόγραμμα Java για να κατανοήσουμε καλύτερα τη λειτουργία τους.
Το ακόλουθο πρόγραμμα Java δείχνει μια εφαρμογή του HashMap στην Java. Σημειώστε ότι έχουμε χρησιμοποιήσει τις περισσότερες από τις μεθόδους που συζητήσαμε παραπάνω.
import java.util.*; public class Main { public static void main(String args()) { HashMap hash_map = new HashMap(); hash_map.put(12, 'Leo'); hash_map.put(2, 'Seville'); hash_map.put(7, 'Lacy'); hash_map.put(49, 'Lily'); hash_map.put(3, 'Dillon'); System.out.println('HashMap contents:'); System.out.println(' KEY VALUE'); //display HashMap contents Set setIter = hash_map.entrySet(); Iterator map_iterator = setIter.iterator(); while(map_iterator.hasNext()) { Map.Entry map_entry = (Map.Entry)map_iterator.next(); System.out.println(' '+ map_entry.getKey() + ' ' + map_entry.getValue()); } //get value for the given key String var= hash_map.get(2); System.out.println('Value at index 2 is: '+var); //delete value given the key hash_map.remove(3); System.out.println('Hashmap after removal:'); System.out.println(' KEY VALUE'); Set iter_set = hash_map.entrySet(); Iterator iterator = iter_set.iterator(); while(iterator.hasNext()) { Map.Entry mentry = (Map.Entry)iterator.next(); System.out.println(' '+mentry.getKey() + ' ' + mentry.getValue() ); } } }
Παραγωγή:
Περιεχόμενα HashMap:
ΒΑΣΙΚΗ ΑΞΙΑ
49 Λίλι
2 Σεβίλλη
3 Ντίλον
7 Δαντελωτές
12 Λέων
Η τιμή στο ευρετήριο 2 είναι: Σεβίλλη
Hashmap μετά την αφαίρεση:
ΒΑΣΙΚΗ ΑΞΙΑ
49 Λίλι
2 Σεβίλλη
7 Δαντελωτές
12 Λέων
Ταξινόμηση HashMap στην Java
Στην Java, το HashMap δεν διατηρεί την παραγγελία. Ως εκ τούτου, πρέπει να ταξινομήσουμε τα στοιχεία στο HashMap. Μπορούμε να ταξινομήσουμε τα στοιχεία στο HashMap είτε με βάση κλειδιά ή τιμές. Σε αυτήν την ενότητα, θα συζητήσουμε και τις δύο προσεγγίσεις ταξινόμησης.
Ταξινόμηση HashMap κατά πλήκτρα
import java.util.*; public class Main { public static void main(String() args) { //create and initialize a HashMap HashMap colors_map = new HashMap(); colors_map.put(9, 'Magenta'); colors_map.put(11, 'Yellow'); colors_map.put(7, 'Cyan'); colors_map.put(23, 'Brown'); colors_map.put(5, 'Blue'); colors_map.put(3, 'Green'); colors_map.put(1, 'Red'); //print the unsorted HashMap by getting a set and using iterator System.out.println('Unsorted HashMap:'); Set set = colors_map.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry me = (Map.Entry)iterator.next(); System.out.print(me.getKey() + ': '); System.out.println(me.getValue()); } //create a treemap from given HashMap so that the keys are sorted Map map = new TreeMap(colors_map); System.out.println('HashMap Sorted on keys:'); //print the sorted HashMap Set set2 = map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry me2 = (Map.Entry)iterator2.next(); System.out.print(me2.getKey() + ': '); System.out.println(me2.getValue()); } } }
Παραγωγή:
Χωρίς ταξινόμηση HashMap:
1: Δίκτυο
3: Πράσινο
5: Μπλε
7: Κυανό
23: Μπράουν
9: Ματζέντα
11: Κίτρινο
HashMap Ταξινόμηση στα πλήκτρα:
1: Δίκτυο
3: Πράσινο
5: Μπλε
7: Κυανό
9: Ματζέντα
11: Κίτρινο
23: Μπράουν
πώς να κάνετε μια επίθεση ddos σε έναν ιστότοπο
Στο παραπάνω πρόγραμμα, βλέπουμε ότι μόλις ο κατακερματισμός οριστεί και συμπληρωθεί με τιμές, δημιουργούμε έναν χάρτη πορείας από αυτόν τον κατακερματισμό. Καθώς το hashmap μετατρέπεται σε χάρτη πορείας, τα κλειδιά του ταξινομούνται αυτόματα. Έτσι, όταν εμφανίζουμε αυτόν τον χάρτη πορείας, λαμβάνουμε τον ταξινομημένο χάρτη στα κλειδιά.
Ταξινόμηση HashMap κατά τιμές
Για να ταξινομήσετε ένα HashMap σύμφωνα με τιμές, πρώτα μετατρέπουμε το hashmap σε LinkedList. Στη συνέχεια, χρησιμοποιούμε τη μέθοδο Collections.sort μαζί με το συγκριτικό για να ταξινομήσουμε τη λίστα. Αυτή η λίστα μετατρέπεται στη συνέχεια σε HashMap. Στη συνέχεια εκτυπώνεται το ταξινομημένο HashMap.
import java.util.*; public class Main { public static void main(String() args) { //Create and initialize the HashMap HashMap colors_map = new HashMap(); colors_map.put(5, 'B'); colors_map.put(11, 'O'); colors_map.put(3, 'I'); colors_map.put(13, 'R'); colors_map.put(7, 'G'); colors_map.put(1, 'V'); colors_map.put(9, 'Y'); //print the HashMap using iterator after converting to set System.out.println('Unsorted HashMap:'); Set set = colors_map.entrySet(); Iterator iterator = set.iterator(); while(iterator.hasNext()) { Map.Entry map_entry = (Map.Entry)iterator.next(); System.out.print(map_entry.getKey() + ': '); System.out.println(map_entry.getValue()); } //call sortByValues method that returns a sorted Map. Map c_map = sortByValues(colors_map); System.out.println('HashMap sorted on values:'); //print the sorted HashMap Set set2 = c_map.entrySet(); Iterator iterator2 = set2.iterator(); while(iterator2.hasNext()) { Map.Entry map_entry2 = (Map.Entry)iterator2.next(); System.out.print(map_entry2.getKey() + ': '); System.out.println(map_entry2.getValue()); } } private static HashMap sortByValues(HashMap hash_map) { //create a LinkedList from HashMap List list = new LinkedList(hash_map.entrySet()); // use Collections.sort method with Comparator to sort the list Collections.sort(list, new Comparator() { public int compare(Object o1, Object o2) { return ((Comparable) ((Map.Entry) (o1)).getValue()) .compareTo(((Map.Entry) (o2)).getValue()); } }); //create a HashMap from linkedlist which preserves the order HashMap sortedHashMap = new LinkedHashMap(); for (Iterator it = list.iterator(); it.hasNext();) { Map.Entry entry = (Map.Entry) it.next(); sortedHashMap.put(entry.getKey(), entry.getValue()); } return sortedHashMap; } }
Παραγωγή:
Χωρίς ταξινόμηση HashMap:
1: V
3: Εγώ
5: Β
7: Ζ
9: και
11: Ο
13: Ρ
Το HashMap ταξινομήθηκε σε τιμές:
5: Β
7: Ζ
3: Εγώ
11: Ο
13: Ρ
1: V
9: και
Ταυτόχρονο HashMap στην Ιάβα
Στο κανονικό HashMap, δεν θα είμαστε σε θέση να τροποποιήσουμε τα στοιχεία κατά το χρόνο εκτέλεσης ή κατά τη διάρκεια της επανάληψης.
Η εφαρμογή ενός ταυτόχρονου χάρτη φαίνεται παρακάτω:
import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class Main { public static void main(String() args) { //declare and initialize ConcurrentHashMap Map cCMap = new ConcurrentHashMap(); cCMap.put('1', '10'); cCMap.put('2', '10'); cCMap.put('3', '10'); cCMap.put('4', '10'); cCMap.put('5', '10'); cCMap.put('6', '10'); //print the initial ConcurrentHashMap System.out.println('Initial ConcurrentHashMap: '+cCMap); //define the iterator over the keys of ConcurrentHashMap Iterator it = cCMap.keySet().iterator(); //change one of the keys using iterator while(it.hasNext()){ String key = it.next(); if(key.equals('3')) cCMap.put(key+'c_map', 'c_map'); } //print the changed ConcurrentHashMap System.out.println('
ConcurrentHashMap after iterator: '+cCMap); } }
Παραγωγή:
Αρχική ConcurrentHashMap: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10}
ConcurrentHashMap μετά τον επαναληπτικό: {1 = 10, 2 = 10, 3 = 10, 4 = 10, 5 = 10, 6 = 10, 3c_map = c_map}
Σημειώστε ότι εάν είχαμε κάνει την ίδια λειτουργία με το HashMap, τότε θα είχε ρίξει το ConcurrentModificationException.
Java Map Vs HashMap
Ας δούμε μερικές από τις διαφορές μεταξύ του Map και του HashMap στην Java.
Χάρτης | HashMap |
---|---|
Είναι μια αφηρημένη διεπαφή. | Είναι μια εφαρμογή διεπαφής χάρτη. |
Η διεπαφή πρέπει να εφαρμοστεί από άλλες κατηγορίες για να είναι διαθέσιμη η λειτουργικότητά της. | Είναι συγκεκριμένη κατηγορία και αντικείμενα κλάσης μπορούν να δημιουργηθούν για να αποκτήσουν τη λειτουργικότητα. |
Η εφαρμογή διεπαφής χάρτη όπως το TreeMap δεν επιτρέπει μηδενικές τιμές. | Επιτρέπει μηδενικές τιμές και κλειδιά. |
Το TreeMap δεν επιτρέπει διπλές τιμές. | Μπορεί να έχει διπλές τιμές. |
Διατηρείται μια φυσική σειρά αντικειμένων. | Δεν διατηρείται παραγγελία εισόδου στο HashMap. |
Συχνές Ερωτήσεις
Q # 1) Γιατί χρησιμοποιείται το HashMap στην Java;
Απάντηση: Το HashMap που είναι η συλλογή ζευγών κλειδιού-τιμής βοηθά στην αναζήτηση των δεδομένων μόνο με βάση το κλειδί. Επίσης, καθώς χρησιμοποιεί τεχνικές κατακερματισμού, παρέχει μια αποτελεσματική αναζήτηση δεδομένων.
Q # 2)Πώς δημιουργείτε έναν κατακερματισμό χάρτη;
Απάντηση: Ένα HashMap μπορεί να δημιουργηθεί δημιουργώντας την κατηγορία «HashMap» του πακέτου java.util. Μπορεί να δημιουργηθεί ένα hashMap με πλήκτρα ακέραιου τύπου και τιμές συμβολοσειράς τύπου ως εξής:
HashMap myMap= new HashMap();
Q # 3)Παραγγέλθηκε το HashMap στην Java;
Απάντηση: Όχι, το HashMap δεν έχει παραγγελθεί σε Java. Δεν χρησιμοποιείται στην Java για το σκοπό αυτό, αλλά χρησιμοποιείται για την αποθήκευση στοιχείων σε ζεύγη κλειδιών-τιμών.
Q # 4)Είναι ασφαλές το νήμα HashMap;
Απάντηση: ΟΧΙ, το hashMap δεν είναι ασφαλές στο νήμα στην Java.
Q # 5)Ποιο είναι ταχύτερο HashMap ή ConcurrentHashMap;
Απάντηση: Το HashMap είναι ταχύτερο από το ConcurrentHashMap. Ο λόγος είναι ότι το HashMap λειτουργεί μόνο σε ένα νήμα, επομένως η απόδοσή του είναι καλή. Το ταυτόχρονο HashMap, ωστόσο, όπως υποδηλώνει το όνομα, είναι ταυτόχρονο και μπορεί να λειτουργήσει ταυτόχρονα σε πολλά νήματα.
συμπέρασμα
Σε αυτό το σεμινάριο, καταλάβαμε τη λειτουργία του HashMap μαζί με μια άλλη παραλλαγή του HashMap που ονομάζεται ConcurrentHashMap. Έχουμε δει κατασκευαστές, μεθόδους και παραδείγματα του HashMap. Συζητήσαμε επίσης το ConcurrentHashMap μαζί με το παράδειγμά του.
Στα επερχόμενα σεμινάρια μας, θα μάθουμε περισσότερα για τις Συλλογές Java.
=> Δείτε εδώ για να δείτε εδώ το A-Z Of Java Training Tutorials.
Συνιστώμενη ανάγνωση
- LinkedHashMap In Java - LinkedHashMap Παράδειγμα & υλοποίηση
- Εκπαιδευτικό πρόγραμμα JAVA για αρχάριους: 100+ πρακτικά εκπαιδευτικά βίντεο Java
- TreeMap In Java - Tutorial With Java TreeMap Παραδείγματα
- Τι είναι το Java Java | Java Vector Class Tutorial με παραδείγματα
- Το Java String περιέχει () Μέθοδος Εκμάθησης με Παραδείγματα
- Πώς να ταξινομήσετε μια σειρά σε Java - Tutorial με παραδείγματα
- Jagged Array In Java - Εκμάθηση με παραδείγματα
- Εκπαιδευτικό μάθημα Java Scanner με παραδείγματα