Ο ρύθμιση δέχεται διπλές τιμές?
Αν προσπαθήσουμε να εισαγάγουμε διπλές τιμές σε ένα “σετ”, τι θα συμβεί? Λάβουμε σφάλμα συμμορφώσεων
Όταν προσπαθούμε να εισαγάγουμε διπλές τιμές σε ένα “σετ”, δεν προσθέτει τις διπλές τιμές. Η μέθοδος “προσθήκη” της διεπαφής Set επιστρέφει μια τιμή boolean, υποδεικνύοντας αν το στοιχείο προστέθηκε με επιτυχία ή όχι. Εάν προσπαθήσουμε να προσθέσουμε μια αντίγραφα, η μέθοδος θα επιστρέψει ψευδείς. Αυτή η συμπεριφορά είναι συνεπής σε διαφορετικές γλώσσες προγραμματισμού, όπως η Java και η Swift.
Πώς να δημιουργήσετε ένα σετ με διπλότυπα στοιχεία στο Swift
Στο Swift, ένα σετ είναι μια συλλογή από μοναδικά στοιχεία χωρίς διπλότυπα. Ωστόσο, είναι δυνατό να δημιουργήσετε ένα σετ με διπλότυπα στοιχεία. Όταν δημιουργούμε ένα σετ με διπλότυπα στοιχεία στο Swift, η γλώσσα αναγνωρίζει ότι τα αντίγραφα πρέπει να αφαιρεθούν. Ως εκ τούτου, αφαιρεί αυτόματα όλα τα διπλά στοιχεία. Αυτό το χαρακτηριστικό κάνει τα Swift σετ εξαιρετικά χρήσιμα για το χειρισμό συλλογών μοναδικών τιμών.
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
Ένα σετ είναι μια συλλογή από μοναδικά στοιχεία, που σημαίνει ότι δεν επιτρέπει διπλά. Ωστόσο, σε ορισμένες περιπτώσεις, μπορεί να θέλουμε να δημιουργήσουμε ένα σετ που περιέχει διπλά στοιχεία. Το Swift αναγνωρίζει αυτόματα τα διπλότυπα σε σύνολα και τα αφαιρεί. Αυτό το άρθρο διερευνά τον τρόπο δημιουργίας σετ με διπλότυπα στοιχεία στο SWIFT και αποδεικνύει τη συμπεριφορά των συνόλων όταν προστίθενται διπλές τιμές.
Σύνταξη
Αφήστε το SetName: SET<Στοιχείο> = [DupplicateElements]
Η σύνταξη για τη δημιουργία ενός σετ με διπλά στοιχεία στο Swift είναι απλή. Απλά δηλώστε μια μεταβλητή με τον τύπο Set, ακολουθούμενη από τον χειριστή εκχώρησης και τα στοιχεία που περικλείονται σε τετράγωνα αγκύλες. Ο τύπος του συνόλου μπορεί να καθοριστεί για να περιορίσει περαιτέρω τα στοιχεία σε έναν συγκεκριμένο τύπο, όπως int ή string.
Παράμετροι
- SetName: Αυτό είναι το όνομα του σετ που θέλουμε να δημιουργήσουμε.
- Dupplicateelements: Αυτά είναι τα στοιχεία που θέλουμε να προσθέσουμε στο σετ. Αυτά τα στοιχεία μπορούν να αντιγραφούν.
- Τύπος: Αυτός είναι ο τύπος του σετ, όπως int, string, κ.λπ. Καθορίζει τον τύπο των στοιχείων που μπορούν να αποθηκευτούν στο σετ.
Τιμή επιστροφής
Μετά τη δημιουργία ενός σετ με διπλότυπα στοιχεία, η επιστρεφόμενη τιμή θα είναι ένα σετ που απορρίπτει όλα τα αντίγραφα. Το Swift αφαιρεί αυτόματα τυχόν διπλότυπα στοιχεία από σετ για να εξασφαλίσει ότι παραμένουν μοναδικές συλλογές.
Εισαγωγή Swift Αφήστε το LecureID: SET<Int> = [023, 023, 055, 034, 065, 065, 134] Αφήστε το UserID: SET<Σειρά> = ["24SD2", "24SD2", "24SD2", "24SD2"] Αφήστε το EvenNumbers: SET<Int> = [2, 4, 6, 8, 10, 6, 2, 10] Αφήστε το IsStudentNice: SET<Φουσκωτό> = [FALSE, TRUE, TRUE, FALSE, FALSE] Αφήστε τις τιμές: Ρύθμιση<Διπλό> = [24.32, 45.32, 40.00, 1.45, 1.45, 24.32] Αφήστε ονόματα: ρύθμιση<Σειρά> = ["Theodore", "Theodore", "Ruth", "Chichi", "Amaka", "Theodore"] εκτύπωση (lurectID) εκτύπωση (userid) εκτύπωση (EvenNumbers) εκτύπωση (IsStudentNice) εκτύπωση (τιμές) εκτύπωση (ονόματα)
Εξήγηση
- Γραμμές 4-9: Δημιουργούμε σύνολα χρησιμοποιώντας τον τύπο ρύθμισης και καθορίζουμε τους τύπους των στοιχείων τους. Κάθε σετ περιέχει μερικά διπλά στοιχεία.
- Γραμμές 12-17: Εκτυπώνουμε τα σετ στην κονσόλα για να παρατηρήσουμε τη συμπεριφορά των σετ με διπλότυπα.
- Παρατηρούμε ότι το SWIFT αφαιρεί αυτόματα τυχόν διπλά στοιχεία από σετ.
Απλό πρόγραμμα για να αποδείξετε, τι συμβαίνει εάν προσθέσετε διπλά στοιχεία σε ένα σετ.
Μπορούμε να δημιουργήσουμε σύνολα σε διάφορες γλώσσες προγραμματισμού, όχι μόνο Swift. Για παράδειγμα, στην Java, μπορούμε να δημιουργήσουμε σύνολα χρησιμοποιώντας την κλάση hashset και να αποθηκεύσουμε διαφορετικούς τύπους τιμών. Το πρόγραμμα Java παρακάτω καταδεικνύει τον τρόπο με τον οποίο τα σύνολα χειρίζονται διπλά στοιχεία:
Εισαγωγή Java.χρησιμοποιώ.Hashset; Εισαγωγή Java.χρησιμοποιώ.Σειρά; δημόσια τάξη canaddUplicateValueInset { δημόσιο στατικό κενό κύριο (String [] args) { Σειρά<Σειρά> uniquEcolours = νέο hashset <> (); μονοεπικευχές.Προσθήκη ("κόκκινο"); μονοεπικευχές.Προσθήκη ("πράσινο"); μονοεπικευχές.Προσθήκη ("μπλε"); μονοεπικευχές.Προσθήκη ("μπλε"); / * Προσθήκη διπλής τιμής εδώ, κανένα σφάλμα μεταγλωττιστή και κωδικός λειτουργεί καλά, αλλά δεν προσθέτει διπλή τιμή */ για (Χρώμα συμβολοσειράς: uniqueColours) { Σύστημα.έξω.println (χρώμα); } } }
Στο παραπάνω πρόγραμμα Java, δημιουργούμε ένα σετ που ονομάζεται Uniquecolours χρησιμοποιώντας την κλάση Hashset. Προσθέτουμε διαφορετικά χρώματα στο σετ, συμπεριλαμβανομένης μιας διπλής τιμής “μπλε”. Το πρόγραμμα δεν ρίχνει κανένα σφάλμα χρόνου εκτέλεσης ή εκτέλεσης. Λειτουργεί καλά και δεν αποθηκεύει διπλές τιμές. Όταν επαναλαμβάνουμε το σετ και εκτυπώνουμε τις τιμές του, παρατηρούμε ότι η διπλή τιμή “μπλε” δεν υπάρχει.
Εάν προσπαθήσουμε να εισαγάγουμε διπλές τιμές σε ένα “Σειρά”, τι θα συμβεί? Λάβουμε σφάλμα συμμορφώσεων
Απλά δεν το κάνει’Τ Προσθήκη διπλότυπου αξίες. Φουσκωμένος Προσθήκη(E) – Προσθέτει το καθορισμένο στοιχείο σ ‘αυτό σειρά Εάν δεν υπάρχει ήδη (προαιρετική λειτουργία). Οπως και, Προσθήκη() Η μέθοδος επιστρέφει το boolean και επάνω προσθέτωντας Διπλασιάσεις θα επιστρέψει ψευδείς. Παρακάτω Ιάβα Το παράδειγμα πηγαίου κώδικα λειτουργεί καλά και το JVM (Java Virtual Machine) δεν’t παραπονούνται.
Πώς να δημιουργήσετε ένα σετ με διπλότυπα στοιχεία στο Swift
Πολλοί υποψήφιοι απορρίπτονται ή μειώνονται λόγω κακής απόδοσης στη συνέντευξη σχεδιασμού του συστήματος τους. Ξεχωρίστε σε συνεντεύξεις σχεδιασμού συστήματος και προσλήφθηκαν το 2023 με αυτό το δημοφιλές δωρεάν μάθημα.
Λάβετε δωρεάν πορεία
Λάβετε δωρεάν πορεία
ΣΦΑΙΡΙΚΗ ΕΙΚΟΝΑ
Ένα σετ είναι μια συλλογή από μοναδικά στοιχεία χωρίς αντίγραφα. Ωστόσο, μπορούμε να δημιουργήσουμε ένα σετ με διπλά στοιχεία. Αλλά η μαγεία είναι ότι το Swift θα ξέρει ότι τα αντίγραφα στοιχεία θα πρέπει να είναι ένα. Ως εκ τούτου, θα αφαιρέσει όλα τα αντίγραφα.
Σύνταξη
Έστω το όνομα: set = [dupplicateElements]// με τον καθορισμό τύπου σετΈστω το όνομα: set = [dupplicateElements]
Σύνταξη για τη δημιουργία διπλών στοιχείων ενός σετ
Παράμετροι
- SetName: Αυτό είναι το όνομα του σετ που θέλουμε να δημιουργήσουμε.
- DupplicateElements: Αυτό αντιπροσωπεύει τα στοιχεία των συνόλων που είναι διπλότυπα.
- Τύπος: Αυτός είναι ο τύπος του σετ. Θα μπορούσε να είναι int, string και ούτω καθεξής.
Τιμή επιστροφής
Η τιμή που επιστρέφεται μετά τη δημιουργία ενός σετ με διπλότυπα στοιχεία θα είναι ένα σετ που απορρίπτει όλα τα διπλότυπα.
Εισαγωγή Swift// Δημιουργία διπλών συλλογών σετLETE LEUCTIONID: SET = [023, 023, 055, 034, 065,065, 134]Αφήστε το UserId: SET = ["24SD2", "24SD2", "24SD2", "24SD2"]Αφήστε το EvenNumbers: set = [2, 4, 6, 8, 10, 6, 2, 10]ας IsstudentNice: set = [false, true, true, false, false]Αφήστε τις τιμές: set = [24.32, 45.32, 40.00, 1.45, 1.45, 24.32]Αφήστε τα ονόματα: set = ["Theodore", "Theodore", "Ruth", "Chichi", "Amaka", "Theodore"]// Εκτυπώστε τα σύνολα στην κονσόλαεκτύπωση (lurectID)εκτύπωση (userid)εκτύπωση (EvenNumbers)εκτύπωση (IsStudentNice)εκτύπωση (τιμές)εκτύπωση (ονόματα)
Δημιουργία καθορισμένων αντικειμένων με διπλότυπα στοιχεία στο SWIFT
Εξήγηση
- Γραμμές 4-9: Δημιουργούμε μερικά σύνολα. Κάθε σετ περιέχει μερικά αντίγραφα.
- Γραμμές 12-17: Εκτυπώσουμε τα σετ στην κονσόλα.
- Παρατηρούμε ότι το Swift απορρίπτει τυχόν αντίγραφα.
Εάν προσπαθήσουμε να εισαγάγουμε διπλές τιμές σε ένα “Σειρά”, τι θα συμβεί? Λάβουμε σφάλμα συμμορφώσεων?
Απλά δεν το κάνει’Τ Προσθήκη διπλότυπου αξίες. Φουσκωμένος Προσθήκη(E) – Προσθέτει το καθορισμένο στοιχείο σ ‘αυτό σειρά Εάν δεν υπάρχει ήδη (προαιρετική λειτουργία). Οπως και, Προσθήκη() Η μέθοδος επιστρέφει το boolean και επάνω προσθέτωντας Διπλασιάσεις θα επιστρέψει ψευδείς. Παρακάτω Ιάβα Το παράδειγμα πηγαίου κώδικα λειτουργεί καλά και το JVM (Java Virtual Machine) δεν’t παραπονούνται.
Εάν εισάγουμε διπλές τιμές στο σετ, δεν θα’να λάβετε τυχόν σφάλματα χρόνου μεταγλώττισης ή εκτέλεσης. Δεν κάνει’t Προσθέστε διπλές τιμές στο σετ.
Παρακάτω είναι η μέθοδος Add () της διεπαφής Set στη συλλογή Java που επιστρέφει την τιμή Boolean είτε True είτε False όταν το αντικείμενο υπάρχει ήδη στο σετ.
[Boolean Add (E E) – Προσθέτει το καθορισμένο στοιχείο σε αυτό το σετ εάν δεν υπάρχει ήδη . Επιστροφές: τιμή boolean true/false.]
Απλό πρόγραμμα για να αποδείξετε, τι συμβαίνει εάν προσθέσετε διπλά στοιχεία σε ένα σετ.
Δημιουργήσαμε ένα σετ για την αποθήκευση διαφορετικών τύπων χρωμάτων χρησιμοποιώντας Ρυθμίστε την αναφορά διεπαφής με αντικείμενο κλάσης hashset. Προσθέτουμε διαφορετικούς τύπους χρωμάτων e.σολ. Κόκκινο, πράσινο και μπλε κ.λπ. στο σετ και εμφανίζοντας τα χρώματα στην οθόνη της κονσόλας με την επαναφορά του σετ για βρόχο.
Σκόπιμα, προσθέσαμε ξανά ένα μπλε χρώμα για να ελέγξουμε την αποδοχή του hashset dipplicates. Παρατηρήστε ότι το πρόγραμμα Java θα λειτουργήσει καλά και δεν ρίχνει κανένα σφάλμα μεταγλωττιστή ή χρόνου εκτέλεσης. Αλλά, δεν θα αποθηκεύσει διπλές τιμές.
Παράδειγμα πηγαίου κώδικα: Για να ελέγξετε Εάν η java ρυθμίστε προσθέστε το ίδιο στοιχείο ή όχι
Εισαγωγή Java.χρησιμοποιώ.Hashset; Εισαγωγή Java.χρησιμοποιώ.Σειρά; δημόσια τάξη canaddUplicateValueInset < public static void main(String[] args) < Set uniqueColours = new HashSet(); uniqueColours.add("Red"); uniqueColours.add("Green"); uniqueColours.add("Blue"); uniqueColours.add("Blue"); /*Adding duplicate value here, No compiler error and code works fine but doesn't add duplicate value */ System.out.println("Colours available in set are:"); for (String c : uniqueColours)< System.out.println(c); >>>
Παραγωγή:
Τα χρώματα που είναι διαθέσιμα στο σετ είναι:
Μπλε
το κόκκινο
Πράσινος
Ερωτήσεις και απαντήσεις γρήγορης αναψυχής στο Java Set Add Dipplicate.
- Q) Το Hashset έχει διπλές τιμές?
- Α) Όχι, το hashset δεν μπορεί να έχει διπλές τιμές.
- Α) Μια τιμή boolean επιστρέφεται με τη μέθοδο add ().μι. Το True in Object δεν υπάρχει και ψευδές εάν υπάρχει ήδη στο σετ.
- Α) Το πρόγραμμα δεν θα εμφανίζει σφάλμα μεταγλωττιστή ή σφάλμα χρόνου εκτέλεσης και δεν θα επιτρέψει αντίγραφα.
Εάν προσπαθήσουμε να εισαγάγουμε διπλές τιμές σε ένα “Σειρά”, τι θα συμβεί? Λάβουμε σφάλμα συμμορφώσεων?
- Εδώ είναι 4 τρόποι για να εκτυπώσετε στοιχεία ArrayList στη Java
- Τι είναι η ουρά προτεραιότητας Java με παράδειγμα εφαρμογής σε πραγματικό χρόνο?
- Τι είναι συγκρίσιμο και συγκριτής στη Java?
- Εξηγήστε τον φορέα, την πολυπλοκότητα του χρόνου και τον τρόπο με τον οποίο ο φορέας μεγαλώνει στην Java
- Συλλογές Java Σύντομες Συχνές ερωτήσεις συνέντευξης με απαντήσεις – πραγματικές
Ομαδοποιημένα θέματα
Ερωτήσεις συνέντευξης Java
- Βασικές ερωτήσεις Java
- Συλλογές Java
- Java Multithreading Ερωτήσεις
- Μαθήματα Java
- Ασκήσεις Java
Ερωτήσεις συνέντευξης C/C ++
- C Προγραμματισμός C
- Βασικές ερωτήσεις C ++
- Ερωτήσεις προκαταβολής C ++
- Ερωτήσεις προγραμματισμού C ++
- Παραδείγματα προγραμματισμού C ++
C# Ερωτήσεις συνέντευξης
- C# βασικές ερωτήσεις
- C# Προκαταβολές ερωτήσεις
- C# Ερωτήσεις MultithReading
- C# Ερωτήσεις προγραμματισμού
- C# Ασκήσεις προγραμματισμού
- C# Παραδείγματα κωδικοποίησης
- C# Tutorials
Ερωτήσεις πολλαπλής επιλογής
- Series Fibonacci σε Java χρησιμοποιώντας Recursion and Non Recursion
- Series Fibonacci σε Java χρησιμοποιώντας βρόχο – Clear Logic
- Γιατί να χρησιμοποιήσετε μοτίβα σχεδιασμού – καλύτεροι λόγοι
- Πραγματική ιστορία: Πώς όλα τα CSE Freshers πήραν δουλειά σε 5 μήνες
- 50 δύσκολη java mcqs – ελέγξτε αν μπορείτε να απαντήσετε
- ντο
- Παραδείγματα προγραμματισμού C
- C# Advanced
- C# Basic
- C# Multi-Threading
- C# Ασκήσεις προγράμματος
- C# Προγραμματισμός
- C# Παραδείγματα προγραμματισμού
- C# Tutorials
- C ++ Advanced
- C ++ Basic
- Προγραμματισμός C ++
- Παραδείγματα προγραμματισμού C ++
- Κωδικοποίηση
- Πυρήνα java
- Σχεδιαστικά πρότυπα
- Σχέδια σχεδιασμού και αρχές
- DS & Algo
- ε-συγγραφέας
- Συνεντεύξεις HR
- Η ιστορία επιτυχίας της συνέντευξης
- Κωδικοποίηση java
- Συλλογές Java
- Παραδείγματα συλλογών Java
- Ασκήσεις Java
- Java multithreading
- Σημειώσεις Java
- Φροντιστήριο java
- Μαθηματικά παζλ
- MCQ-C++
- McQ-Java
- MCQ-SQL
- Αλγόριθμοι MCQS και δομή δεδομένων
- Γενικός δικτύωσης
- Oracle PL SQL
- Οι υπολοιποι
- Εργασίες λογισμικού
- SQL
- Βάση δεδομένων SQL
- χρονική πολυπλοκότητα
- Διάγραμμα uml
- Μη ταξινομημένος
Java: Γιατί ένα σετ μπορεί να περιέχει διπλά στοιχεία
Γίνετε μέλος της κοινότητας DZone και λάβετε την πλήρη εμπειρία μέλους.
Σε εφαρμογές χαμηλής καθυστέρησης, η δημιουργία περιττών αντικειμένων συχνά αποφεύγεται με την επαναχρησιμοποίηση των μεταβλητών αντικειμένων για τη μείωση της πίεσης της μνήμης και επομένως το φορτίο στον συλλέκτη σκουπιδιών. Αυτό κάνει την εφαρμογή να λειτουργεί πολύ πιο ντετερμινικά και με πολύ λιγότερο jitter. Ωστόσο, πρέπει να ληφθεί μέριμνα σχετικά με τον τρόπο με τον οποίο χρησιμοποιούνται αυτά τα επαναχρησιμοποιημένα αντικείμενα ή αλλιώς απροσδόκητα αποτελέσματα μπορεί να εκδηλωθούν, για παράδειγμα με τη μορφή ενός συνόλου που περιέχει διπλά στοιχεία όπως [b, b].
Hashcode και ισούται
Ιάβα’Το S Bytebuffer S παρέχει άμεση πρόσβαση σε σωρό και εγγενή μνήμη χρησιμοποιώντας διευθύνσεις 32 bit. Το Chronicle Bytes είναι μια αντικατάσταση drop-in που απευθύνεται σε 64-bit που επιτρέπει την αντιμετώπιση πολύ μεγαλύτερων τμημάτων μνήμης. Και οι δύο αυτοί τύποι παρέχουν μια μέθοδο hashcode () και equals () που εξαρτάται από τα περιεχόμενα byte των αντικειμένων’ υποκείμενο τμήμα μνήμης. Ενώ αυτό μπορεί να είναι χρήσιμο σε πολλές περιπτώσεις, τα μεταβλητά αντικείμενα όπως αυτά δεν πρέπει να χρησιμοποιούνται στο μεγαλύτερο μέρος της Java’ΣΥΜΒΟΥΛΕΣ ΤΩΝ ΤΥΠΟΥ και όχι ως κλειδί στους περισσότερους ενσωματωμένους τύπους χάρτη.
Σημείωση: Στην πραγματικότητα, μόνο 31 και 63 bits μπορούν να χρησιμοποιηθούν ως αποτελεσματική μετατόπιση διεύθυνσης (Ε.σολ. Χρήση παραμέτρων int και μεγάλης μετατόπισης)
Μεταβλητά κλειδιά
Παρακάτω, παρουσιάζεται ένα μικρό παράδειγμα κώδικα που απεικονίζει το πρόβλημα με επαναχρησιμοποιούμενα μεταβλητά αντικείμενα. Ο κώδικας δείχνει τη χρήση bytes, αλλά το ίδιο πρόβλημα υπάρχει για το bytebuffer.
Set set = new hashset <> (); Bytes >bytes = bytes.από ένα"); σειρά.Προσθήκη (bytes); // Επαναχρησιμοποίηση bytes.WritePosition (0); // Αυτό μεταλλάσσει το υπάρχον αντικείμενο ήδη // στα bytes set.γράψτε ("b"); // προσθέτει ξανά το ίδιο αντικείμενο bytes, αλλά τώρα κάτω από // άλλο hashcode () set.Προσθήκη (bytes); Σύστημα.έξω.println (“σύνολο = “ + σειρά);
Ο παραπάνω κωδικός θα προσθέσει πρώτα ένα αντικείμενο με “ΕΝΑ” ως περιεχόμενο που σημαίνει ότι το σύνολο περιέχει [a]. Τότε το περιεχόμενο αυτού του υπάρχοντος αντικειμένου θα τροποποιηθεί “σι”, που έχει την παρενέργεια της αλλαγής του σετ να περιέχει [b], αλλά θα αφήσει την παλιά τιμή κώδικα hash και τον αντίστοιχο κάδο κατακερματισμού αμετάβλητο (αποτελεσματικά να γίνει stale). Τέλος, το τροποποιημένο αντικείμενο προστίθεται ξανά στο σύνολο, αλλά τώρα κάτω από έναν άλλο κωδικό κατακερματισμού που οδηγεί στην προηγούμενη καταχώρηση για αυτό το ίδιο αντικείμενο θα παραμείνει!
Ως αποτέλεσμα, και όχι το ίσως αναμενόμενο [a, b], αυτό θα παράγει την ακόλουθη έξοδο:
Απλό κείμενο
set = [b, b]
Bytebuffer και bytes αντικείμενα ως κλειδιά σε χάρτες
Όταν χρησιμοποιείτε java’Αντικείμενα bytebuffer S ή bytes αντικείμενα ως κλειδιά σε χάρτες ή ως στοιχεία σε σύνολα, μία λύση χρησιμοποιεί ένα ταυτότητα ή συλλογές IdentityHashMap.NewsetFrommap (New IdentityHashMap <> ()) για την προστασία από τις ιδιαιτερότητες του μεταβλητού αντικειμένου που περιγράφονται παραπάνω. Αυτό κάνει το hashing των αντικειμένων Agnostic στο πραγματικό περιεχόμενο byte και θα χρησιμοποιήσει το σύστημα.IdentityHashCode () που δεν αλλάζει ποτέ κατά τη διάρκεια της ζωής του αντικειμένου.
Μια άλλη εναλλακτική λύση είναι να χρησιμοποιήσετε μια έκδοση μόνο για ανάγνωση των αντικειμένων (για παράδειγμα, επικαλούμενοι Bytebuffer.AsReadOnlyBuffer ()) και αποφεύγετε να κρατάτε οποιαδήποτε αναφορά στο αρχικό μεταβλητό αντικείμενο που θα μπορούσε να προσφέρει μια πίσω πόρτα για να τροποποιήσει το υποτιθέμενο αντικείμενο μόνο για ανάγνωση’περιεχόμενο.
Χρονικός χάρτης και χρονική ουρά
Το Chronicle Map είναι μια βιβλιοθήκη ανοιχτού κώδικα που λειτουργεί λίγο διαφορετικά από τις ενσωματωμένες υλοποιήσεις του χάρτη Java με τον τρόπο που τα αντικείμενα είναι σειριοποιημένα και να τεθούν σε μνήμη εκτός έδρας, ανοίγοντας πολύ μεγάλους χάρτες που μπορεί να είναι μεγαλύτεροι από τη μνήμη RAM που διατίθεται στο JVM και επιτρέπει σε αυτούς τους χάρτες να επιμένουν σε αρχεία που έχουν υποστεί μνήμη, ώστε οι εφαρμογές να μπορούν να επανέλθουν πολύ πιο γρήγορα.
Η διαδικασία σειριοποίησης έχει ένα άλλο λιγότερο γνωστό πλεονέκτημα με τον τρόπο που πραγματικά επιτρέπει επαναχρησιμοποιήσιμα μεταβλητά αντικείμενα ως κλειδιά, επειδή το περιεχόμενο του αντικειμένου αντιγράφεται και είναι ουσιαστικά καταψύχθηκε κάθε φορά που τοποθετείται μια νέα συσχέτιση στον χάρτη. Επομένως, οι μεταγενέστερες τροποποιήσεις του μεταβλητού αντικειμένου δεν θα επηρεάσουν το κατεψυγμένο σειριοποιημένο περιεχόμενο που επιτρέπει την επαναχρησιμοποίηση απεριόριστων αντικειμένων.
Η ουρά chronicle ανοιχτού κώδικα λειτουργεί με παρόμοιο τρόπο και μπορεί να παρέχει ουρές που μπορούν να κρατήσουν terabytes δεδομένων που παραμένουν σε δευτερεύουσα αποθήκευση και, για τον ίδιο λόγο με τον χάρτη Chronicle, επιτρέπει την επαναχρησιμοποίηση αντικειμένων των μεταβλητών στοιχείων.
Συμπεράσματα
Είναι επικίνδυνο να χρησιμοποιείτε μεταβλητά αντικείμενα, όπως bytes και bytebuffer, όπου ο hashcode () εξαρτάται από το περιεχόμενο του αντικειμένου, σε ορισμένες χάρτες και τις υλοποιήσεις.
Μια ταυτότητα το HashMap προστατεύει από τη διαφθορά των χαρτών και των συνόλων λόγω μετάλλαξης αντικειμένων, αλλά καθιστά αυτές τις δομές αγνωστικιστικές με τα πραγματικά περιεχόμενα byte.
Οι εκδοχές μόνο για ανάγνωση αντικειμένων τμήματος μνήμης ενδέχεται να παρέχουν μια εναλλακτική λύση.
Χρονικός Χάρτης και Χρονική ουρά επιτρέπουν απεριόριστη χρήση μεταβλητών αντικειμένων, ανοίγοντας τη διαδρομή προς τις ντετερμινιστικές επιχειρήσεις χαμηλής καθυστέρησης.
Ο ρύθμιση δέχεται διπλές τιμές?
Το Hashset είναι μια εφαρμογή της διεπαφής Set που δεν επιτρέπει διπλή τιμή. Το κύριο πράγμα είναι ότι τα αντικείμενα που αποθηκεύονται στο hashset πρέπει να παρακάμπτουν ίσα () για έλεγχο για την ισότητα και οι μέθοδοι hashcode () για μη διπλή τιμή αποθηκεύονται στο σετ μας. Το HashMap είναι μια εφαρμογή της διεπαφής MAP, η οποία χαρτογραφεί ένα κλειδί για αξία. Διπλότυπα κλειδιά δεν επιτρέπονται σε χάρτη. Βασικά, η διεπαφή χάρτη έχει δύο κατηγορίες εφαρμογής Hashmap και Treemap Η κύρια διαφορά είναι ότι το Treemap διατηρεί μια σειρά αντικειμένων, αλλά το hashmap δεν θα. Το Hashmap επιτρέπει τις μηδενικές τιμές και τα μηδενικά πλήκτρα. Τόσο το hashset όσο και το hashmap δεν συγχρονίζονται.
Τώρα ας διατυπώσουμε τη διαφορά μεταξύ του hashmap και του hashset, όπως προβλέπεται με πίνακα παρακάτω ως εξής:
Βασικός Κατακερματισμό Χασμάπτ Εφοδιάζω Ρυθμισμένη διεπαφή Διασύνδεση χάρτη Διπλότυπα Οχι Ναι, επιτρέπονται τιμές διπλών αντιγράφων, αλλά δεν επιτρέπεται το διπλότυπο κλειδί Εικονικές τιμές Ναί Οχι Αντικείμενα που απαιτούνται κατά τη διάρκεια μιας λειτουργίας προσθήκης 1 2 Προσθήκη και αποθήκευση μηχανισμού Αντικείμενο hashmap Τεχνική κατακερματισμού Ταχύτητα Είναι συγκριτικά πιο αργό από το hashmap Είναι συγκριτικά ταχύτερο από το hashset λόγω της τεχνικής κατακερματισμού έχει χρησιμοποιηθεί εδώ. Μηδενικό Έχετε μία μόνο μηδενική τιμή Μοναδικό πλήκτρο και οποιοδήποτε αριθμό μηδενικών τιμών Μέθοδος εισαγωγής Απαιτείται μόνο μία τιμή για τη διαδικασία εισαγωγής. Η λειτουργία προσθήκη () χρησιμοποιείται για εισαγωγή Απαιτούνται δύο τιμές για τη διαδικασία εισαγωγής. Η συνάρτηση () χρησιμοποιείται για εισαγωγή. Αποθήκευση δεδομένων Τα δεδομένα αποθηκεύονται ως αντικείμενα. Τα δεδομένα αποθηκεύονται ως ζεύγος βασικών τιμών. Περίπλοκο Επί) O (1) Ας κατανοήσουμε την κατανόηση με την εμφάνιση της εσωτερικής εργασίας με τη βοήθεια καθαρών προγραμμάτων Java.
Παράδειγμα 1: Κατακερματισμό