|
Υπάρχουν τρεις τρόποι για να διασχίσετε μια λίστα
<A> Λίστα λίστας = new ArrayList<A>(); list.add(νέο A()); list.add(νέο A()); ...
Ο πρώτος τύπος: for(Iterator<A> it = list.iterator(); it.hasNext(); ) { .... } Αυτός ο τρόπος είναι σε έναν κύκλο Ταυτόχρονα, εάν θέλετε να αφαιρέσετε ένα στοιχείο στη διαδικασία της ευχαρίστησης, μπορείτε να καλέσετε μόνο τη μέθοδο it.remove, δεν μπορείτε να χρησιμοποιήσετε τη μέθοδο list.remove, διαφορετικά θα υπάρξει σφάλμα ταυτόχρονης πρόσβασης. Αλλά η συμβατότητα είναι η καλύτερη, κατάλληλη για τη συλλογή Collection
Ο δεύτερος τύπος: for(A a : λίστα) { ..... } Η μέθοδος για κάθε μέθοδο εξακολουθεί να είναι επαναλήπτης, η πρώτη καλείται εσωτερικά και η σούπα δεν αλλάζει και υπάρχουν άλλοι περιορισμοί σε αυτήν την κυκλική μέθοδο, επομένως δεν συνιστάται η χρήση της Μπορεί να χρησιμοποιηθεί μόνο πάνω από το JK1.5 με κακή συμβατότητα Το σετ είναι καλύτερο να το χρησιμοποιήσετε
Ο τρίτος τύπος: for(int i=0; i<list.size(); i++) { A a = list.get(i); ... } for , η διέλευση των περιεχομένων μιας συλλογής List λειτουργεί μόνο για τη List, επειδή η List είναι μια διατεταγμένη συλλογή , το εσωτερικό δεν είναι κλειδωμένο, η υψηλότερη απόδοση, αλλά όταν γράφετε multithreading, θα πρέπει να λαμβάνεται υπόψη το πρόβλημα των ταυτόχρονων λειτουργιών! Η διέλευση μιας συλλογής Set είναι με τον ίδιο τρόπο όπως μια List, αλλά δεν μπορείτε να χρησιμοποιήσετε έναν βρόχο for για να επαναλάβετε μια συλλογή Set επειδή δεν υπάρχει μέθοδος get() στη συλλογή Set. Αλλά μπορεί να επαναληφθεί με βελτιώσεις Διασχίστε τη συλλογή Set Set<String> set = νέο HashSet<String>(); set.add("qqq"); set.add("www"); set.add("εεεε"); set.add("rrr");
for(Συμβολοσειρά s : set){ System.out.println("set="+s); }
|