Sobes.tech
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