Middle
Περιγράψτε την ιεραρχία συλλογών στη Java.
sobes.tech AI
Απάντηση από AI
Η ιεραρχία των συλλογών στη Java βασίζεται σε ένα σύνολο διεπαφών που παρέχουν έναν τυπικό τρόπο αναπαράστασης ομάδων αντικειμένων.
Βασικές διεπαφές:
Collection: η ριζική διεπαφή της ιεραρχίας. Ορίζει βασικές λειτουργίες που εφαρμόζονται σε όλες τις συλλογές: προσθήκη, διαγραφή, έλεγχος ύπαρξης στοιχείων, καθορισμός μεγέθους.Set: συλλογή χωρίς διπλότυπα και χωρίς καθορισμένη σειρά στοιχείων.List: ταξινομημένη συλλογή με πρόσβαση σε στοιχεία μέσω δείκτη. Μπορεί να περιέχει διπλότυπα.Queue: συλλογή προορισμένη για την αποθήκευση στοιχείων πριν από την επεξεργασία. Συνήθως ακολουθεί τον κανόνα FIFO (First-In, First-Out), αλλά υπάρχουν και άλλες υλοποιήσεις.Deque: διπλής όψης ουρά. Υποστηρίζει την προσθήκη και διαγραφή στοιχείων και από τις δύο άκρες.Map: συλλογή που αποθηκεύει ζεύγη "κλειδί-τιμή". Τα κλειδιά πρέπει να είναι μοναδικά. Δεν επεκτείνει το interfaceCollection.
Κύριες υλοποιήσεις αυτών των διεπαφών (παραδείγματα):
| Διεπαφή | Υλοποιητές κλάσεις (παραδείγματα) | Περιγραφή |
|---|---|---|
Set |
HashSet, LinkedHashSet, TreeSet |
Χωρίς διπλότυπα. HashSet - χωρίς σειρά, LinkedHashSet - διατηρεί τη σειρά εισαγωγής, TreeSet - ταξινομημένο. |
List |
ArrayList, LinkedList, Vector |
Ταξινομημένη. ArrayList - βασίζεται σε πίνακα, LinkedList - βασίζεται σε συνδεδεμένη λίστα, Vector - συγχρονισμένη (παλιά). |
Queue |
LinkedList, PriorityQueue |
Για επεξεργασία. LinkedList - FIFO, PriorityQueue - βασίζεται σε προτεραιότητες. |
Deque |
ArrayDeque, LinkedList |
Διπλής όψης ουρά. ArrayDeque - βασίζεται σε πίνακα, LinkedList - βασίζεται σε συνδεδεμένη λίστα. |
Map |
HashMap, LinkedHashMap, TreeMap, Hashtable |
Κλειδί-τιμή. HashMap - χωρίς εγγυημένη σειρά, LinkedHashMap - διατηρεί τη σειρά εισαγωγής/πρόσβασης, TreeMap - ταξινομημένο κατά κλειδιά, Hashtable - συγχρονισμένο (παλιό). |
Παράδειγμα χρήσης ArrayList:
// Δημιουργία ArrayList από συμβολοσειρές
List<String> fruits = new ArrayList<>();
// Προσθήκη στοιχείων
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Orange");
// Πρόσβαση με δείκτη
String firstFruit = fruits.get(0); // Apple
// Μέγεθος συλλογής
int size = fruits.size(); // 3
Παράδειγμα χρήσης HashSet:
// Δημιουργία HashSet από ακέραιους
Set<Integer> numbers = new HashSet<>();
// Προσθήκη στοιχείων (διπλότυπα αγνοούνται)
numbers.add(1);
numbers.add(2);
numbers.add(2); // Αγνοείται
// Μέγεθος συλλογής
int size = numbers.size(); // 2
Παράδειγμα χρήσης HashMap:
// Δημιουργία HashMap: κλειδί - String, τιμή - Integer
Map<String, Integer> ages = new HashMap<>();
// Προσθήκη ζευγών κλειδιού-τιμής
ages.put("Alice", 30);
ages.put("Bob", 25);
// Ανάκτηση τιμής με κλειδί
int ageAlice = ages.get("Alice"); // 30
// Έλεγχος αν υπάρχει το κλειδί
boolean hasBob = ages.containsKey("Bob"); // true