This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
java:jfc_intf_collection [2015/03/16 16:35] gthanos [Εργασίες με πολλαπλές εγγραφές] |
java:jfc_intf_collection [2017/02/17 16:29] gthanos [Εργασίες με πολλαπλές εγγραφές] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Collection Interface ====== | + | ====== java.util.Collection ====== |
- | Το βασικό Interface στην Java το οποίο αποτελεί το ελάχιστον κοινό Interface των //Set//, //List//, //Queue//, //Dequeue//. | + | To interface Collection περιγράφει μία συλλογή στοιχείων ιδίου τύπου. Αποτελεί το ελάχιστο κοινό interface των [[java:jfc_intf_set|Set]], [[java:jfc_intf_list|List]], [[https://docs.oracle.com/javase/7/docs/api/java/util/Queue.html|Queue]]. |
===== Διάτρεξη ενός Collection ===== | ===== Διάτρεξη ενός Collection ===== | ||
Line 43: | Line 43: | ||
==== 2ος τρόπος - iterator ==== | ==== 2ος τρόπος - iterator ==== | ||
- | Μπορείτε να αντικαταστήσετε την ''iterateList'' με την παρακάτω | + | Μπορείτε να αντικαταστήσετε την ''iterateList'' με την παρακάτω υλοποίηση. Ο τύπος [[http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html|Iterator<Τ>]] είναι ένας παραμετρικός τύπος δεδομένων (ένα interface) που επιτρέπει την διάτρεξη του Collection από την αρχή έως το τέλος. |
<code java> | <code java> | ||
public void iterateList() { | public void iterateList() { | ||
Line 53: | Line 54: | ||
</code> | </code> | ||
- | Συνιστάται ο 2ος τρόπος αντί για τον 1ο εάν θέλετε καθώς διατρέχετε τη συλλογή να διαγράφετε και εγγραφές. | + | Στο παραπάνω παράδειγμα οι δύο μέθοδοι ''iterateList()'' είναι ισοδύναμες. Το πλεονέκτημα του iterator είναι ότι σας επιτρέπει να διαγράφετε εγγραφές καθώς διατρέχετε τη συλλογή. Συγκεκριμένα, μπορείτε να διαγράφετε εγγραφές μέσω της μεθόδου [[http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html#remove()|remove()]]. Για παράδειγμα, η παρακάτω μέθοδος διαγράφει όλα τα δεδομένα της συλλογής: |
+ | |||
+ | <code java> | ||
+ | <code java> | ||
+ | public void clearCollection() { | ||
+ | Iterator<Student> it = students.iterator(); | ||
+ | while( it.hasNext() ) { | ||
+ | it.remove(); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== Βασικές μέθοδοι ===== | ||
+ | |||
+ | * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#isEmpty()|isEmpty()]]:** Εξετάζει αν το Collection έχει περιεχόμενα ή όχι επιστρέφοντας true/false. | ||
+ | * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#size()|size()]]:** Επιστρέφει τον αριθμό των αντικειμένων που περιέχει το Collection ή μηδέν αν είναι άδειο. | ||
+ | * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#iterator()|iterator()]]:** Επιστρέφει ένα [[https://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html|Iterator<E>]] object για την διάτρεξη του Collection. | ||
===== Εργασίες με πολλαπλές εγγραφές ===== | ===== Εργασίες με πολλαπλές εγγραφές ===== | ||
+ | * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#clear()|clear()]]** - Διαγράφει όλα τα περιεχόμενα του Collection. | ||
* **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#containsAll%28java.util.Collection%29|containsAll(Collection<?> c)]]** - Επιστρέφει true εάν υπάρχουν όλα τα μέλη της ''c'' στην αρχική λίστα. Διαφορετικά επιστρέφει false. | * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#containsAll%28java.util.Collection%29|containsAll(Collection<?> c)]]** - Επιστρέφει true εάν υπάρχουν όλα τα μέλη της ''c'' στην αρχική λίστα. Διαφορετικά επιστρέφει false. | ||
Line 89: | Line 108: | ||
public static void main(String args[]) { | public static void main(String args[]) { | ||
StudentCollection stl = new StudentCollection(); | StudentCollection stl = new StudentCollection(); | ||
- | Collection <Student> sts = stl.getStudents(); | + | 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) ) { | if( stl.getStudents().containsAll(sts) ) { | ||
Line 102: | Line 127: | ||
</code> | </code> | ||
- | * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#addAll%28java.util.Collection%29|removeAll(Collection<?> c)]]** - Προσθέτει όλες τις εγγραφές που περιέχονται στο Collection ''c''. | + | Στην συνέχεια βάλτε σχόλια στην γραμμή που υποδεικνύουν τα σχόλια και αφαιρέστε το τμήμα του κώδικα που είναι σε σχόλια. Μεταγλωττίστε και τρέξτε. Ποιό είναι το αποτέλεσμα αυτή την φορά; Γιατί συμβαίνει αυτό; |
+ | |||
+ | <WRAP center 70% round tip> | ||
+ | Όταν συγκρίνονται δύο //Collections// ως προς τα περιεχόμενα τους συγκρίνουμε εάν το πρώτο περιέχει __τα ίδια__ στοιχεία με το δεύτερο, δηλαδή τα ίδια αντικείμενα. Εάν δημιουργηθούν αντίγραφα των αντικειμένων της μίας και τοποθετηθούν στην 2η η σύγκριση των περιεχομένων δεν επιστρέφει ισότητα. | ||
+ | </WRAP> | ||
+ | |||
+ | * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#addAll%28java.util.Collection%29|addAll(Collection<?> c)]]** - Προσθέτει όλες τις εγγραφές που περιέχονται στο Collection ''c''. | ||
<code java StudentCollection.java> | <code java StudentCollection.java> | ||
Line 187: | Line 218: | ||
StudentCollection stl = new StudentCollection(); | StudentCollection stl = new StudentCollection(); | ||
Collection <Student> sts = new LinkedList<Student>(); | Collection <Student> sts = new LinkedList<Student>(); | ||
+ | | ||
+ | //comment for statement | ||
int i=0; | int i=0; | ||
for(Student st : stl.getStudents()) { | for(Student st : stl.getStudents()) { | ||
Line 192: | Line 225: | ||
if(++i==2) break; | 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.getStudents().removeAll(sts); | ||
Line 199: | Line 238: | ||
} | } | ||
</code> | </code> | ||
+ | |||
+ | <WRAP center 70% round tip> | ||
+ | Και εδώ ισχύει ότι αναφέραμε παραπάνω αναφορικά με την σύγκριση των //Collections//. Eάν η συλλογή //sts// δημιουργηθεί από αντίγραφα των αντικειμένων της συλλογής //stl//, η μέθοδος //removeAll// δεν θα αφαιρέσει κανένα στοιχείο. Αφαίρεση αντικειμένων θα γίνει μόνο για αντικείμενα που ανήκουν ταυτόχρονα στις συλλογές //stl// και //sts//. | ||
+ | </WRAP> | ||