Sobes.tech
Junior

Ποιοι είναι οι τρόποι επανάληψης σε συλλογές στην 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):
    Ο πιο συνηθισμένος και βολικός τρόπος. Κατάλληλος για οποιεσδήποτε συλλογές που υλοποιούν το interface Iterable.

    // Παράδειγμα επανάληψης σε 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 για συλλογές που υλοποιούν το interface List. Επιτρέπει την πλοήγηση μπροστά και πίσω, καθώς και την προσθήκη και τροποποίηση στοιχείων.

    // Παράδειγμα επανάληψης με 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 προσφέρει ισχυρές δυνατότητες επεξεργασίας δεδομένων με δηλωτικό τρόπο.