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 (η χαμηλότερη προτεραιότητα)