This is an old revision of the document!
Το βασικό Interface στην Java το οποίο αποτελεί το ελάχιστον κοινό Interface των Set, List, Queue, Dequeue.
To interface java.util.Collection είναι απόγονος του interface java.lang.Iterable. Ως εκ τούτου, η διάτρεξη οποιουδήποτε Collection μπορεί να γίνει με δύο τρόπους
import java.util.*; import java.lang.*; public class StudentCollection { private Collection<Student> students; public StudentCollection() { students = new LinkedList<Student>(); populateList(); } public final void populateList() { students.add(new Student("John", "Smith")); students.add(new Student("Stanley", "Peters")); students.add(new Student("Edgar", "Bloch")); students.add(new Student("Suzan", "Miles")); students.add(new Student("Mary", "Poppins")); } public void iterateList() { for(Student st: students) { System.out.println(st.toString()); } } public static void main(String args[]) { StudentCollection stl = new StudentCollection(); stl.iterateList(); } }
Μπορείτε να αντικαταστήσετε την iterateList με την παρακάτω υλοποίηση
public void iterateList() { Iterator<Student> it = students.iterator(); while( it.hasNext() ) { System.out.println(it.next().toString()); } }
Συνιστάται ο 2ος τρόπος αντί για τον 1ο εάν θέλετε καθώς διατρέχετε τη συλλογή να διαγράφετε και εγγραφές.
c στην αρχική λίστα. Διαφορετικά επιστρέφει false.import java.util.*; import java.lang.*; import java.util.*; import java.lang.*; public class StudentCollection { public static void main(String args[]) { Collection<Student> students = new ArrayList<>(); students.add(new Student("John", "Smith")); students.add(new Student("Stanley", "Peters")); students.add(new Student("Edgar", "Bloch")); students.add(new Student("Suzan", "Miles")); students.add(new Student("Mary", "Poppins")); Collection <Student> sts = new LinkedList<Student>(); sts.add(new Student("John", "Smith")); sts.add(new Student("Stanley", "Peters")); if( students.containsAll(sts) ) { System.out.println("containsAll:TRUE"); } else { System.out.println("containsAll:FALSE"); } } }
Απαραίτητη προϋπόθεση για να δουλέψει σωστά η μέθοδος containsAll είναι η παράμετρος κλάση του Collection να υλοποιεί τις μεθόδους equals και hashCode. Εάν αφαιρέσετε έστω και μία από τις μεθόδους αυτές από την υλοποίηση της κλάσης Student θα παρατηρήσετε ότι η μέθοδος containsAll δεν αναγνωρίζει τα αντικείμενα της μεταβλητής sts ως αντίγραφα εκείνων που περιέχονται στην αρχική λίστα φοιτητών students.
* addAll(Collection<?> c) - Προσθέτει όλες τις εγγραφές που περιέχονται στο Collection c.
import java.util.*; public class StudentCollection { public static void main(String args[]) { Collection<Student> students = new ArrayList<>(); students.add(new Student("John", "Smith")); students.add(new Student("Stanley", "Peters")); students.add(new Student("Edgar", "Bloch")); students.add(new Student("Suzan", "Miles")); students.add(new Student("Mary", "Poppins")); Collection <Student> sts = new LinkedList<Student>(); sts.add(new Student("John", "Smith")); sts.add(new Student("Stanley", "Peters")); students.addAll(sts); print(students); } public static void print(Collection<Student> collection) { Iterator<Student> it = collection.iterator(); while(it.hasNext()) System.out.println(it.next()); } }
Στον παραπάνω κώδικα αντικαταστήστε την πρώτη γραμμή της main με
Collection<Student> students = new HashSet<>();
Τι παρατηρείτε; Γιατί συμβαίνει αυτό;
c.import java.util.*; public class StudentCollection { public static void main(String args[]) { Collection<Student> students = new ArrayList<>(); students.add(new Student("John", "Smith")); students.add(new Student("Stanley", "Peters")); students.add(new Student("Edgar", "Bloch")); students.add(new Student("Suzan", "Miles")); students.add(new Student("Mary", "Poppins")); Collection <Student> sts = new LinkedList<Student>(); sts.add(new Student("John", "Smith")); sts.add(new Student("Stanley", "Peters")); students.addAll(sts); students.removeAll(sts); print(students); } public static void print(Collection<Student> collection) { Iterator<Student> it = collection.iterator(); while(it.hasNext()) System.out.println(it.next()); } }
Παρατηρήστε ότι η μέθοδος removeAll αφαιρεί το σύνολο των εγγραφών ακόμη και εάν μία εγγραφή εμφανίζεται περισσότερες από μία φορές.
| Προηγούμενο: JCF Interfaces | Περιεχόμενα | Επόμενο: Interface java.util.Set |