Ποιοι είναι οι τρόποι επανάληψης σε συλλογές στην Java;
sobes.tech AI
Απάντηση από AI
Υπάρχουν διάφοροι τρόποι επανάληψης σε συλλογές στην Java:
-
Βρόχος
forμε χρήση δείκτη (για συλλογές που υποστηρίζουν πρόσβαση μέσω δείκτη, π.χ.ArrayList,LinkedList):
Κατάλληλος για συλλογές όπου η πρόσβαση στα στοιχεία μέσω δείκτη είναι αποδοτική.// Παράδειγμα επανάληψης σε ArrayList ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (int i = 0; i < list.size(); i++) { String element = list.get(i); System.out.println(element); } -
Επεκταμένος βρόχος
for(Enhanced for loop / for-each loop):
Ο πιο συνηθισμένος και βολικός τρόπος. Κατάλληλος για οποιεσδήποτε συλλογές που υλοποιούν το interfaceIterable.// Παράδειγμα επανάληψης σε ArrayList με for-each ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); for (String element : list) { System.out.println(element); } -
Χρήση
Iterator:
Πιο ευέλικτος τρόπος, επιτρέπει τη διαγραφή στοιχείων κατά τη διάρκεια της επανάληψης. Κατάλληλος για όλες τις συλλογές.// Παράδειγμα επανάληψης με χρήση Iterator ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); // Μπορείτε να διαγράψετε στοιχεία με ασφάλεια // if (element.equals("B")) { // iterator.remove(); // } } -
Χρήση
ListIterator(για λίστες):
Εξειδικευμένος iterator για συλλογές που υλοποιούν το interfaceList. Επιτρέπει την πλοήγηση μπροστά και πίσω, καθώς και την προσθήκη και τροποποίηση στοιχείων.// Παράδειγμα επανάληψης με ListIterator ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); ListIterator<String> listIterator = list.listIterator(); while (listIterator.hasNext()) { String element = listIterator.next(); System.out.println(element); } // Παράδειγμα επανάληψης προς τα πίσω while (listIterator.hasPrevious()) { String element = listIterator.previous(); System.out.println(element); } -
Streams API (από Java 8):
Λειτουργική προσέγγιση με χρήση lambda εκφράσεων. Επιτρέπει την εκτέλεση λειτουργιών πάνω στα στοιχεία της συλλογής (φιλτράρισμα, μετατροπή κ.ά.) με δηλωτικό τρόπο. Η επανάληψη γίνεται "εσωτερικά" μέσα στο ρεύμα.// Παράδειγμα επανάληψης με Streams API ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.stream() .forEach(element -> System.out.println(element)); // Παράδειγμα φιλτραρίσματος και μετατροπής // list.stream() // .filter(element -> element.startsWith("A")) // .map(String::toLowerCase) // .forEach(System.out::println);
Ο κατάλληλος τρόπος εξαρτάται από την συγκεκριμένη εργασία, τον τύπο της συλλογής και τις απαιτήσεις απόδοσης. Για τις περισσότερες περιπτώσεις, ο επεκταμένος βρόχος for είναι ο πιο βολικός. Αν χρειάζεται διαγραφή στοιχείων κατά τη διάρκεια της επανάληψης, πρέπει να χρησιμοποιείται ο Iterator. Για λίστες όπου απαιτείται διπλής κατεύθυνσης επανάληψη, ταιριάζει ο ListIterator. Το Streams API προσφέρει ισχυρές δυνατότητες επεξεργασίας δεδομένων με δηλωτικό τρόπο.