Το βασικό 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 { public static void iterateCollection(Collection<Student> students) { for(Student st: students) { System.out.println(st.toString()); } } public static void main(String args[]) { Collection<Student> students; students = new LinkedList<Student>(); 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")); iterateCollection(students); } }
Μπορείτε να αντικαταστήσετε την iterateCollection
με την παρακάτω υλοποίηση
public static void iterateCollection(Collection<Student> students) { 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 |