This is an old revision of the document!
Το βασικό Interface στην Java το οποίο αποτελεί το ελάχιστον κοινό Interface των Set, List, Queue, Dequeue.
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 { 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 Collection<Student> getStudents() { return students; } public static void main(String args[]) { StudentCollection stl = new StudentCollection(); Collection <Student> sts = stl.getStudents(); // comment out this line and uncomment the following comments /* Collection <Student> sts = new LinkedList<Student>(); sts.add(new Student("John", "Smith")); sts.add(new Student("Stanley", "Peters")); */ if( stl.getStudents().containsAll(sts) ) { System.out.println("containsAll:TRUE"); } else { System.out.println("containsAll:FALSE"); } } }
Στην συνέχεια βάλτε σχόλια στην γραμμή που υποδεικνύουν τα σχόλια και αφαιρέστε το τμήμα του κώδικα που είναι σε σχόλια. Μεταγλωττίστε και εκτελέστε. Ποιο είναι το αποτέλεσμα αυτή την φορά; Γιατί συμβαίνει αυτό;
Όταν συγκρίνονται δύο Collections ως προς τα περιεχόμενα τους συγκρίνουμε εάν η πρώτη περιέχει τα ίδια ακριβώς στοιχεία με την δεύτερη, δηλαδή τα ίδια ακριβώς objects. Εάν δημιουργηθούν αντίγραφα των objects της μίας και τοποθετηθούν στην 2η η σύγκριση των περιεχομένων δεν επιστρέφει ισότητα.
* addAll(Collection<?> c) - Προσθέτει όλες τις εγγραφές που περιέχονται στο Collection c.
import java.util.*; import java.lang.*; 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 Collection<Student> getStudents() { return students; } public void iterateList() { for(Student st: students) { System.out.println(st.toString()); } } public static void main(String args[]) { StudentCollection stl = new StudentCollection(); Collection <Student> sts = new LinkedList<Student>(); sts.add(new Student("Lena", "Travolta")); sts.add(new Student("George", "Thanos")); stl.getStudents().addAll(sts); stl.iterateList(); } }
c.import java.util.*; import java.lang.*; 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 Collection<Student> getStudents() { return students; } public void iterateList() { for(Student st: students) { System.out.println(st.toString()); } } public static void main(String args[]) { StudentCollection stl = new StudentCollection(); Collection <Student> sts = new LinkedList<Student>(); //comment for statement int i=0; for(Student st : stl.getStudents()) { sts.add(st); if(++i==2) break; } //and uncomment this code below /* sts.add(new Student("John", "Smith")); sts.add(new Student("Stanley", "Peters")); */ stl.getStudents().removeAll(sts); stl.iterateList(); } }
Και εδώ ισχύει ότι αναφέραμε παραπάνω αναφορικά με την σύγκριση των Collections. Eάν η λίστα sts δημιουργηθεί από αντίγραφα των αντικειμένων της λίστας stl, η μέθοδος removeAll δεν θα αφαιρέσει τίποτα.
| Προηγούμενο: JCF Interfaces | Περιεχόμενα | Επόμενο: Interface java.util.Set |