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
Previous revision
java:jfc_intf_collection [2015/03/16 16:17]
gthanos
java:jfc_intf_collection [2017/02/17 16:29] (current)
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. 
  
 ===== Εργασίες με πολλαπλές εγγραφές ===== ===== Εργασίες με πολλαπλές εγγραφές =====
  
-==== containsAll(Collection<?>​ c) ====+  * **[[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 { 
 + 
 +  private Collection<​Student>​ students; 
 +   
 +  public StudentCollection() { 
 +    students ​new LinkedList<​Student>​();​ 
 +    populateList();​ 
 +  } 
 +   
 +  public final void populateList() { 
 +    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"​));​ 
 +  } 
 +   
 +  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>​();​ 
 +    sts.add(new Student("​John",​ "​Smith"​));​ 
 +    sts.add(new Student("​Stanley",​ "​Peters"​));​ 
 +    */ 
 +  
 +    if( stl.getStudents().containsAll(sts) ) { 
 +       ​System.out.println("​containsAll:​TRUE"​);​ 
 +    } 
 +    else { 
 +       ​System.out.println("​containsAll:​FALSE"​);​ 
 +    } 
 +     
 +  } 
 +
 +</​code>​ 
 + 
 +Στην συνέχεια βάλτε σχόλια στην γραμμή που υποδεικνύουν τα σχόλια και αφαιρέστε το τμήμα του κώδικα που είναι σε σχόλια. Μεταγλωττίστε και τρέξτε. Ποιό είναι το αποτέλεσμα αυτή την φορά; Γιατί συμβαίνει αυτό; 
 + 
 +<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>​ 
 +import java.util.*;​ 
 +import java.lang.*;​ 
 +import java.util.*;​ 
 +import java.lang.*;​ 
 + 
 +public class StudentCollection { 
 + 
 +  private Collection<​Student>​ students; 
 +   
 +  public StudentCollection() { 
 +    students ​new LinkedList<​Student>​();​ 
 +    populateList();​ 
 +  } 
 +   
 +  public final void populateList() { 
 +    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"​));​ 
 +  } 
 +   
 +  public Collection<​Student>​ getStudents() { 
 +    return students; 
 +  } 
 +  
 +  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>​();​ 
 +    sts.add(new Student("​Lena",​ "​Travolta"​));​ 
 +    sts.add(new Student("​George",​ "​Thanos"​));​ 
 +     
 +    stl.getStudents().addAll(sts);​ 
 +    stl.iterateList(); ​    
 +  } 
 +}  
 +</​code>​ 
 + 
 +  * **[[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.*;​ 
 +import java.lang.*;​ 
 + 
 +import java.util.*;​ 
 +import java.lang.*;​ 
 + 
 +public class StudentCollection { 
 + 
 +  private Collection<​Student>​ students; 
 +   
 +  public StudentCollection() { 
 +    students ​new LinkedList<​Student>​();​ 
 +    populateList();​ 
 +  } 
 +   
 +  public final void populateList() { 
 +    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"​));​ 
 +  } 
 +   
 +  public Collection<​Student>​ getStudents() { 
 +    return students; 
 +  } 
 +   
 +  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>​();​ 
 +     
 +    //comment for statement 
 +    int i=0; 
 +    for(Student st : stl.getStudents()) { 
 +      sts.add(st);​ 
 +      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.iterateList();​ 
 +     
 +  } 
 +}  
 +</​code>​ 
 + 
 +<WRAP center 70% round tip> 
 +Και εδώ ισχύει ότι αναφέραμε παραπάνω αναφορικά με την σύγκριση των //​Collections//​. Eάν η συλλογή //sts// δημιουργηθεί από αντίγραφα των αντικειμένων της συλλογής //stl//, η μέθοδος //​removeAll//​ δεν θα αφαιρέσει κανένα στοιχείο. Αφαίρεση αντικειμένων θα γίνει μόνο για αντικείμενα που ανήκουν ταυτόχρονα στις συλλογές //stl// και //sts//. 
 +</​WRAP>​ 
  
  
java/jfc_intf_collection.1426522655.txt.gz · Last modified: 2016/02/26 11:15 (external edit)