Junior
Μιλήστε για την ιεραρχία των συλλογών στη Java.
sobes.tech AI
Απάντηση από AI
Η ιεραρχία των συλλογών στη Java βασίζεται σε δύο βασικά interfaces: το Collection και το Map. Ορίζεται στο πακέτο java.util.
Collection<E>: Το βασικό interface για τις περισσότερες συλλογές. Αντιπροσωπεύει μια ομάδα στοιχείων. Δεν εγγυάται την σειρά ή την μοναδικότητα των στοιχείων.List<E>: Μια ταξινομημένη συλλογή (ακολουθία). Τα στοιχεία έχουν καθορισμένη θέση. Μπορεί να περιέχει διπλότυπα.ArrayList<E>: Υλοποίηση βασισμένη σε πίνακα. Γρήγορη τυχαία πρόσβαση, αργές εισαγωγές/διαγραφές στη μέση.LinkedList<E>: Υλοποίηση βασισμένη σε συνδεδεμένη λίστα. Αργή τυχαία πρόσβαση, γρήγορες εισαγωγές/διαγραφές στην αρχή/τέλος.Vector<E>: Παλαιά, συγχρονισμένη κλάση. Παρόμοια με τοArrayList, αλλά ασφαλής για νήματα (και λιγότερο αποδοτική).Stack<E>: Παλαιά κλάση που επεκτείνει τοVector, υλοποιεί συμπεριφορά στοίβας (LIFO).
Set<E>: Συλλογή που περιέχει μοναδικά στοιχεία.HashSet<E>: Υλοποίηση βασισμένη σε πίνακα κατακερματισμού. Μη ταξινομημένο. Γρήγορες λειτουργίεςadd,remove,contains.LinkedHashSet<E>: Διατηρεί την σειρά εισαγωγής.SortedSet<E>: Ταξινομημένο σύνολο.TreeSet<E>: Υλοποίηση βασισμένη σε κόκκινο-μαύρο δέντρο. Εγγυάται ταξινομημένη σειρά.
Queue<E>: Συλλογή για αποθήκευση στοιχείων πριν από επεξεργασία, συχνά με FIFO σειρά.PriorityQueue<E>: Υλοποίηση προτεραιότητας ουράς. Τα στοιχεία εξάγονται σύμφωνα με την προτεραιότητά τους.Deque<E>: (Διπλής άκρης ουρά) Διπλής κατεύθυνσης ουρά. Υποστηρίζει λειτουργίες εισαγωγής και εξαγωγής και από τις δύο άκρες.ArrayDeque<E>: ΥλοποίησηDequeβασισμένη σε δυναμικό πίνακα. Ταχύτερη από τοLinkedListγια χρήση ως στοίβα ή ουρά.
Map<K, V>: Αντικείμενο που αντιστοιχίζει κλειδιά σε τιμές. Τα κλειδιά είναι μοναδικά, οι τιμές μπορούν να επαναλαμβάνονται.HashMap<K, V>: Υλοποίηση βασισμένη σε πίνακα κατακερματισμού. Μη ταξινομημένο. Γρήγορες λειτουργίεςput,get,remove.LinkedHashMap<K, V>: Διατηρεί την σειρά εισαγωγής ή πρόσβασης.SortedMap<K, V>: Χάρτης ταξινομημένος με βάση τα κλειδιά.TreeMap<K, V>: Υλοποίηση βασισμένη σε κόκκινο-μαύρο δέντρο. Εγγυάται ταξινομημένη σειρά με βάση τα κλειδιά.
Hashtable<K, V>: Παλαιά, συγχρονισμένη κλάση. Παρόμοια με τοHashMap, αλλά ασφαλής για νήματα (και λιγότερο αποδοτική).
Βασικά interfaces:
| Interface | Περιγραφή | Σειρά | Μοναδικότητα | Διπλότυπα τιμών |
|---|---|---|---|---|
Collection |
Ομάδα στοιχείων | +/- | +/- | Ναι |
List |
Ταξινομημένη συλλογή | Ναι | Όχι | Ναι |
Set |
Συλλογή μοναδικών στοιχείων | +/- | Ναι | Όχι |
Queue |
Συλλογή για επεξεργασία (FIFO) | Ναι | Όχι | Ναι |
Deque |
Διπλής άκρης ουρά | Ναι | Όχι | Ναι |
Map |
Χάρτης κλειδιού-τιμής | +/- | Με το κλειδί | Ναι |
SortedSet |
Ταξινομημένο σύνολο | Ναι | Ναι | Όχι |
SortedMap |
Ταξινομημένος χάρτης με βάση τα κλειδιά | Ναι | Με το κλειδί | Ναι |
Παράδειγμα χρήσης:
// Παράδειγμα ArrayList
List<String> ονόματα = new ArrayList<>();
ονόματα.add("Alice");
ονόματα.add("Bob");
System.out.println(ονόματα.get(0)); // Alice
// Παράδειγμα HashSet
Set<Integer> μοναδικοίΑριθμοί = new HashSet<>();
μοναδικοίΑριθμοί.add(1);
μοναδικοίΑριθμοί.add(2);
μοναδικοίΑριθμοί.add(1); // Διπλότυπο αγνοείται
System.out.println(μοναδικοίΑριθμοί.size()); // 2
// Παράδειγμα HashMap
Map<String, Integer> ηλικίες = new HashMap<>();
ηλικίες.put("Alice", 30);
ηλικίες.put("Bob", 25);
System.out.println(ηλικίες.get("Alice")); // 30