Junior
Τι είναι το HashMap και το Set, και σε ποιες περιπτώσεις είναι καλύτερο να τα χρησιμοποιείτε;
sobes.tech AI
Απάντηση από AI
HashMap - είναι μια συλλογή που αποθηκεύει ζεύγη κλειδιού-τιμής. Τα κλειδιά είναι μοναδικά, και οι τιμές μπορούν να επαναληφθούν. Χρησιμοποιεί hashing για γρήγορη πρόσβαση (μέσος όρος O(1)) στα στοιχεία μέσω του κλειδιού.
Set - είναι μια συλλογή που αποθηκεύει μοναδικά στοιχεία. Δεν εγγυάται τη σειρά αποθήκευσης, εκτός αν χρησιμοποιηθεί μια συγκεκριμένη υλοποίηση (π.χ., LinkedHashSet). Οι λειτουργίες προσθήκης, διαγραφής και ελέγχου ύπαρξης ενός στοιχείου εκτελούνται γενικά σε O(1). Υπάρχουν διάφορες υλοποιήσεις, π.χ.:
HashSet: Δεν εγγυάται τη σειρά των στοιχείων.LinkedHashSet: Διατηρεί τη σειρά εισαγωγής.TreeSet: Αποθηκεύει τα στοιχεία σε ταξινομημένη σειρά.
Πότε να το χρησιμοποιήσετε:
- HashMap:
- Όταν χρειάζεται αποτελεσματική αναζήτηση, εισαγωγή ή διαγραφή με βάση το κλειδί.
- Για αποθήκευση συσχετισμένων δεδομένων (π.χ., λεξικό).
- Όταν πρέπει να ελέγξετε γρήγορα αν μια τιμή υπάρχει για ένα κλειδί.
- Set:
- Όταν χρειάζεται να αποθηκεύσετε μόνο μοναδικά στοιχεία.
- Για αποτελεσματικό έλεγχο αν ένα στοιχείο υπάρχει στη συλλογή.
- Για λειτουργίες συνόλων (ένωση, τομή).
Παράδειγμα χρήσης του HashMap:
// Δημιουργία HashMap
HashMap<String, Integer> ηλικίες = new HashMap<>();
// Προσθήκη στοιχείων
ηλικίες.put("Alice", 30);
ηλικίες.put("Bob", 25);
ηλικίες.put("Charlie", 35);
// Λήψη τιμής με βάση το κλειδί
int ηλικίαBob = ηλικίες.get("Bob"); // ηλικίαBob = 25
// Έλεγχος αν υπάρχει το κλειδί
boolean περιέχειAlice = ηλικίες.containsKey("Alice"); // περιέχειAlice = true
Παράδειγμα χρήσης του HashSet:
// Δημιουργία HashSet
HashSet<String> ονόματα = new HashSet<>();
// Προσθήκη στοιχείων
ονόματα.add("Alice");
ονόματα.add("Bob");
ονόματα.add("Charlie");
ονόματα.add("Alice"); // Δεν θα προστεθεί, γιατί ήδη υπάρχει
// Έλεγχος αν υπάρχει το στοιχείο
boolean περιέχειBob = ονόματα.contains("Bob"); // περιέχειBob = true
// Επανάληψη στα στοιχεία
for (String όνομα : ονόματα) {
System.out.println(όνομα);
}