Sobes.tech
Junior

Ποιες είναι οι υλοποιήσεις συλλογών στη γλώσσα προγραμματισμού Java;

sobes.tech AI

Απάντηση από AI

  • Διεπαφές:

    • Collection: Βασική διεπαφή για όλες τις συλλογές.
    • List: Ταξινομημένη συλλογή (με δείκτες).
    • Set: Συλλογή χωρίς διπλότυπα.
    • SortedSet: Συλλογή χωρίς διπλότυπα, των οποίων τα στοιχεία είναι ταξινομημένα.
    • Map: Συγκεντρωτικός πίνακας (κλειδί-τιμή).
    • SortedMap: Ταξινομημένος συγκεντρωτικός πίνακας κατά τα κλειδιά.
    • Queue: Συλλογή για την αποθήκευση στοιχείων πριν την επεξεργασία.
    • Deque: Διπλής κατεύθυνσης ουρά.
  • Κλάσεις (κύριες υλοποιήσεις):

    • Για το List:

      • ArrayList: Δυναμικός πίνακας. Γρήγορη πρόσβαση με δείκτη, αργές λειτουργίες εισαγωγής/διαγραφής στο μέσο.
      • LinkedList: Διπλά συνδεδεμένη λίστα. Αργή πρόσβαση με δείκτη, γρήγορες λειτουργίες εισαγωγής/διαγραφής στο μέσο.
      • Vector: Παλιό, συγχρονισμένο, ισοδύναμο με ArrayList.
      • Stack: Υποκλάση του Vector, υλοποιεί στοίβα (LIFO).
    • Για το Set:

      • HashSet: Υλοποίηση βασισμένη σε πίνακα κατακερματισμού. Δεν εγγυάται σειρά.
      • LinkedHashSet: Βασισμένο σε πίνακα κατακερματισμού και συνδεδεμένη λίστα. Διατηρεί τη σειρά εισαγωγής.
      • TreeSet: Βασισμένο σε κόκκινο-μαύρο δέντρο. Τα στοιχεία ταξινομούνται σε αύξουσα σειρά.
    • Για το Map:

      • HashMap: Βασισμένο σε πίνακα κατακερματισμού. Δεν εγγυάται σειρά των ζευγών κλειδιού-τιμής.
      • Hashtable: Παλιό, συγχρονισμένο, ισοδύναμο με HashMap.
      • LinkedHashMap: Βασισμένο σε πίνακα κατακερματισμού και συνδεδεμένη λίστα. Διατηρεί τη σειρά εισαγωγής.
      • TreeMap: Βασισμένο σε κόκκινο-μαύρο δέντρο. Τα ζευγάρια ταξινομούνται κατά τα κλειδιά.
    • Για το Queue:

      • PriorityQueue: Πίνακας προτεραιότητας. Τα στοιχεία εξάγονται με βάση την φυσική σειρά ή με συγκριτή.
      • ArrayDeque: Υλοποίηση διπλής ουράς βασισμένη σε πίνακα.
  • Βοηθητικά:

    • Collections: Στατικές μέθοδοι για εργασία με συλλογές (ταξινόμηση, αναζήτηση, συγχρονισμός κ.ά.).
// Παράδειγμα χρήσης ArrayList
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
System.out.println(names.get(0)); // Alice
// Παράδειγμα χρήσης HashSet
Set<Integer> numbers = new HashSet<>();
numbers.add(1);
numbers.add(2);
numbers.add(1); // Το διπλό δεν θα προστεθεί
System.out.println(numbers.size()); // 2
// Παράδειγμα χρήσης HashMap
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 30);
ages.put("Bob", 25);
System.out.println(ages.get("Alice")); // 30
// Παράδειγμα χρήσης PriorityQueue
Queue<Integer> priorityQueue = new PriorityQueue<>();
priorityQueue.add(3);
priorityQueue.add(1);
priorityQueue.add(2);
System.out.println(priorityQueue.poll()); // 1 (η χαμηλότερη προτεραιότητα)