User Tools

Site Tools


java:jfc_intf_collection

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
java:jfc_intf_collection [2021/05/22 02:47]
java:jfc_intf_collection [2021/05/22 03:38]
gthanos [1ος τρόπος - For-Each Loop]
Line 1: Line 1:
 +====== Interface java.util.Collection  ======
 +
 +Το βασικό Interface στην Java το οποίο αποτελεί το ελάχιστον κοινό Interface των //Set//, //List//, //Queue//, //Dequeue//.
 +
 +===== Διάτρεξη ενός Collection =====
 +
 +To interface [[https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html|java.util.Collection]] είναι απόγονος του interface [[https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html|java.lang.Iterable]]. Ως εκ τούτου, η διάτρεξη οποιουδήποτε Collection μπορεί να γίνει με δύο τρόπους 
 +  - μέσω For-Each Loop.
 +  - με τη βοήθεια ενός [[https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html|java.util.Iterator]].
 +
 +==== 1ος τρόπος - For-Each Loop ====
 +
 +<code java StudentCollection.java>
 +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[]) {
 +    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);
 +  }
 +
 +</code>
 +
 +==== 2ος τρόπος - iterator ====
 +
 +Μπορείτε να αντικαταστήσετε την ''iterateList'' με την παρακάτω υλοποίηση
 +<code java>
 +  public void iterateList() {  
 +    Iterator<Student> it = students.iterator();
 +    while( it.hasNext() ) {
 +      System.out.println(it.next().toString());
 +    }
 +  }
 +</code>
 +
 +Συνιστάται ο 2ος τρόπος αντί για τον 1ο εάν θέλετε καθώς διατρέχετε τη συλλογή να διαγράφετε και εγγραφές. 
 +
 +===== Βασικές μέθοδοι =====
 +
 +  * **[[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.
 +
 +<code java StudentCollection.java>
 +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");
 +    }
 +    
 +  }
 +}
 +</code>
 +
 +<WRAP tip center 80% round >
 +Απαραίτητη προϋπόθεση για να δουλέψει σωστά η μέθοδος ''containsAll'' είναι η παράμετρος κλάση του Collection να υλοποιεί τις μεθόδους ''equals'' και ''hashCode''. Εάν αφαιρέσετε έστω και μία από τις μεθόδους αυτές από την υλοποίηση της κλάσης Student θα παρατηρήσετε ότι η μέθοδος ''containsAll'' δεν αναγνωρίζει τα αντικείμενα της μεταβλητής ''sts'' ως αντίγραφα εκείνων που περιέχονται στην αρχική λίστα φοιτητών ''students''.
 +</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>
 +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());
 +  }
 +}
 +</code>
 +
 +<WRAP todo center 80% round >
 +Στον παραπάνω κώδικα αντικαταστήστε την πρώτη γραμμή της ''main'' με
 +<code>
 +Collection<Student> students = new HashSet<>();
 +</code>
 +
 +Τι παρατηρείτε; Γιατί συμβαίνει αυτό;
 +</WRAP>
 +
 +  * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#removeAll(java.util.Collection)|removeAll(Collection<?> c)]]** - Αφαιρεί όλες τις εγγραφές που περιέχονται στο Collection ''c''.
 +<code java StudentCollection.java>
 +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());
 +  }
 +}
 +</code>
 +
 +Παρατηρήστε ότι η μέθοδος ''removeAll'' αφαιρεί το σύνολο των εγγραφών ακόμη και εάν μία εγγραφή εμφανίζεται περισσότερες από μία φορές.
 +
 +|Προηγούμενο: [[:java:jfc_interfaces | JCF Interfaces ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:jfc_intf_set | Interface java.util.Set ]] |
  
java/jfc_intf_collection.txt · Last modified: 2021/05/22 02:47 (external edit)