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 revisionPrevious revision
Next revision
Previous revision
java:jfc_intf_collection [2015/03/22 19:26] gthanosjava:jfc_intf_collection [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Collection Interface ======+====== Interface java.util.Collection  ======
  
 Το βασικό Interface στην Java το οποίο αποτελεί το ελάχιστον κοινό Interface των //Set//, //List//, //Queue//, //Dequeue//. Το βασικό Interface στην Java το οποίο αποτελεί το ελάχιστον κοινό Interface των //Set//, //List//, //Queue//, //Dequeue//.
Line 5: Line 5:
 ===== Διάτρεξη ενός Collection ===== ===== Διάτρεξη ενός Collection =====
  
-==== 1ος τρόπος - for() ====+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> <code java StudentCollection.java>
Line 12: Line 16:
  
 public class StudentCollection { public class StudentCollection {
- 
-  private Collection<Student> students; 
      
-  public StudentCollection() { +  public static void iterateCollection(Collection<Student> students) {   
-    students = new LinkedList<Student>(); +    for(Student st: students{ 
-    populateList();+      System.out.println(st.toString()); 
 +    }
   }   }
      
-  public final void populateList() {+  public static void main(String args[]) { 
 +    Collection<Student> students; 
 +    students = new LinkedList<Student>();
     students.add(new Student("John", "Smith"));     students.add(new Student("John", "Smith"));
     students.add(new Student("Stanley", "Peters"));     students.add(new Student("Stanley", "Peters"));
Line 26: Line 31:
     students.add(new Student("Suzan", "Miles"));     students.add(new Student("Suzan", "Miles"));
     students.add(new Student("Mary", "Poppins"));     students.add(new Student("Mary", "Poppins"));
-  } +    iterateCollection(students);
-   +
-  public void iterateList() {   +
-    for(Student st: students) { +
-    System.out.println(st.toString()); +
-    } +
-  } +
-   +
-  public static void main(String args[]) { +
-    StudentCollection stl = new StudentCollection(); +
-    stl.iterateList();+
   }   }
  
Line 43: Line 38:
 ==== 2ος τρόπος - iterator ==== ==== 2ος τρόπος - iterator ====
  
-Μπορείτε να αντικαταστήσετε την ''iterateList'' με την παρακάτω υλοποίηση+Μπορείτε να αντικαταστήσετε την ''iterateCollection'' με την παρακάτω υλοποίηση
 <code java> <code java>
-  public void iterateList() {  +  public static void iterateCollection(Collection<Student> students) {  
     Iterator<Student> it = students.iterator();     Iterator<Student> it = students.iterator();
     while( it.hasNext() ) {     while( it.hasNext() ) {
Line 75: Line 70:
  
 public class StudentCollection { public class StudentCollection {
- +    
-  private Collection<Student> students; +  public static void main(String args[]) { 
-   +    Collection<Student> students = new ArrayList<>();
-  public StudentCollection() { +
-    students = new LinkedList<Student>(); +
-    populateList(); +
-  } +
-   +
-  public final void populateList() {+
     students.add(new Student("John", "Smith"));     students.add(new Student("John", "Smith"));
     students.add(new Student("Stanley", "Peters"));     students.add(new Student("Stanley", "Peters"));
Line 89: Line 78:
     students.add(new Student("Suzan", "Miles"));     students.add(new Student("Suzan", "Miles"));
     students.add(new Student("Mary", "Poppins"));     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>();     Collection <Student> sts = new LinkedList<Student>();
     sts.add(new Student("John", "Smith"));     sts.add(new Student("John", "Smith"));
     sts.add(new Student("Stanley", "Peters"));     sts.add(new Student("Stanley", "Peters"));
-    */ 
    
-    if( stl.getStudents().containsAll(sts) ) {+    if( students.containsAll(sts) ) {
        System.out.println("containsAll:TRUE");        System.out.println("containsAll:TRUE");
     }     }
Line 116: Line 94:
 </code> </code>
  
-Στην συνέχεια βάλτε σχόλια στην γραμμή που υποδεικνύουν τα σχόλια και αφαιρέστε το τμήμα του κώδικα που είναι σε σχόλια. Μεταγλωττίστε και τρέξτε. Ποιό είναι το αποτέλεσμα αυτή την φορά; Γιατί συμβαίνει αυτό+<WRAP tip center 80% round > 
- +Απαραίτητη προϋπόθεση για να δουλέψει σωστά η μέθοδος ''containsAll'' είναι η παράμετρος κλάση του Collection να υλοποιεί τις μεθόδους ''equals'' και ''hashCode''Εάν αφαιρέσετε έστω και μία από τις μεθόδους αυτές από την υλοποίηση της κλάσης Student θα παρατηρήσετε ότι η μέθοδος ''containsAll'' δεν αναγνωρίζει τα αντικείμενα της μεταβλητής ''sts'' ως αντίγραφα εκείνων που περιέχονται στην αρχική λίστα φοιτητών ''students''
-<WRAP center 70% rounded tip> +</WRAP>
-Όταν συγκρίνονται δύο //Collections// ως προς τα περιεχόμενα τους συγκρίνουμε εάν η πρώτη περιέχει __τα ίδια ακριβώς__ στοιχεία με την δεύτερη, δηλαδή τα ίδια ακριβώς objects. Εάν δημιουργηθούν αντίγραφα των objects της μίας και τοποθετηθούν στην 2η η σύγκριση των περιεχομένων δεν επιστρέφει ισότητα+
-</WRAP+
  
 * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#addAll%28java.util.Collection%29|addAll(Collection<?> c)]]** - Προσθέτει όλες τις εγγραφές που περιέχονται στο Collection ''c''. * **[[https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#addAll%28java.util.Collection%29|addAll(Collection<?> c)]]** - Προσθέτει όλες τις εγγραφές που περιέχονται στο Collection ''c''.
Line 126: Line 102:
 <code java StudentCollection.java> <code java StudentCollection.java>
 import java.util.*; import java.util.*;
-import java.lang.*; 
-import java.util.*; 
-import java.lang.*; 
  
 public class StudentCollection { public class StudentCollection {
- +    
-  private Collection<Student> students; +  public static void main(String args[]) { 
-   +    Collection<Student> students = new ArrayList<>();
-  public StudentCollection() { +
-    students = new LinkedList<Student>(); +
-    populateList(); +
-  } +
-   +
-  public final void populateList() {+
     students.add(new Student("John", "Smith"));     students.add(new Student("John", "Smith"));
     students.add(new Student("Stanley", "Peters"));     students.add(new Student("Stanley", "Peters"));
Line 145: Line 112:
     students.add(new Student("Suzan", "Miles"));     students.add(new Student("Suzan", "Miles"));
     students.add(new Student("Mary", "Poppins"));     students.add(new Student("Mary", "Poppins"));
-  } +         
-   +    Collection <Student> sts = new LinkedList<Student>(); 
-  public Collection<Student> getStudents() { +    sts.add(new Student("John", "Smith"))
-    return students+    sts.add(new Student("Stanley", "Peters"));
-  }+
    
-  public void iterateList() {   +    students.addAll(sts); 
-    for(Student st: students) { +    print(students); 
-      System.out.println(st.toString()); +    
-    }+
   }   }
      
-  public static void main(String args[]) { +  public static void print(Collection<Student> collection) { 
-    StudentCollection stl = new StudentCollection();     +    Iterator<Student> it collection.iterator(); 
-    Collection <Student> sts new LinkedList<Student>(); +    while(it.hasNext()) 
-    sts.add(new Student("Lena", "Travolta")); +      System.out.println(it.next());
-    sts.add(new Student("George", "Thanos")); +
-     +
-    stl.getStudents().addAll(sts); +
-    stl.iterateList();    +
   }   }
-+}
 </code> </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''.   * **[[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> <code java StudentCollection.java>
 import java.util.*; import java.util.*;
-import java.lang.*; 
- 
-import java.util.*; 
-import java.lang.*; 
  
 public class StudentCollection { public class StudentCollection {
- +    
-  private Collection<Student> students; +  public static void main(String args[]) { 
-   +    Collection<Student> students = new ArrayList<>();
-  public StudentCollection() { +
-    students = new LinkedList<Student>(); +
-    populateList(); +
-  } +
-   +
-  public final void populateList() {+
     students.add(new Student("John", "Smith"));     students.add(new Student("John", "Smith"));
     students.add(new Student("Stanley", "Peters"));     students.add(new Student("Stanley", "Peters"));
Line 192: Line 152:
     students.add(new Student("Suzan", "Miles"));     students.add(new Student("Suzan", "Miles"));
     students.add(new Student("Mary", "Poppins"));     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 Collection<Student> getStudents() { +  public static void print(Collection<Student> collection) { 
-    return students;+    Iterator<Student> it = collection.iterator(); 
 +    while(it.hasNext()) 
 +      System.out.println(it.next());
   }   }
-   +}
-  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>(); +
-    int i=0; +
-    for(Student st : stl.getStudents()) { +
-      sts.add(st); +
-      if(++i==2) break; +
-    } +
-     +
-    stl.getStudents().removeAll(sts); +
-    stl.iterateList(); +
-     +
-  } +
-+
 </code> </code>
  
 +Παρατηρήστε ότι η μέθοδος ''removeAll'' αφαιρεί το σύνολο των εγγραφών ακόμη και εάν μία εγγραφή εμφανίζεται περισσότερες από μία φορές.
  
 +|Προηγούμενο: [[:java:jfc_interfaces | JCF Interfaces ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:jfc_intf_set | Interface java.util.Set ]] |
  
java/jfc_intf_collection.1427052406.txt.gz · Last modified: 2015/03/22 19:26 by gthanos