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
Previous revision
java:jfc_intf_collection [2021/05/22 02:47]
java:jfc_intf_collection [2021/05/22 03:47]
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[]) {
 +    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);
 +  }
 +
 +</code>
 +
 +==== 2ος τρόπος - iterator ====
 +
 +Μπορείτε να αντικαταστήσετε την ''iterateCollection'' με την παρακάτω υλοποίηση
 +<code java>
 +  public static void iterateCollection(Collection<Student> students) {  
 +    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)