User Tools

Site Tools


java:jfc_intf_collection

This is an old revision of the document!


Collection Interface

Το βασικό Interface στην Java το οποίο αποτελεί το ελάχιστον κοινό Interface των Set, List, Queue, Dequeue.

Διάτρεξη ενός Collection

1ος τρόπος - for()

StudentCollection.java
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 void iterateList() {  
    for(Student st: students) {
      System.out.println(st.toString());
    }
  }
 
  public static void main(String args[]) {
    StudentCollection stl = new StudentCollection();
    stl.iterateList();
  }
} 

2ος τρόπος - iterator

Μπορείτε να αντικαταστήσετε την iterateList με την παρακάτω υλοποίηση

  public void iterateList() {  
    Iterator<Student> it = students.iterator();
    while( it.hasNext() ) {
      System.out.println(it.next().toString());
    }
  }

Συνιστάται ο 2ος τρόπος αντί για τον 1ο εάν θέλετε καθώς διατρέχετε τη συλλογή να διαγράφετε και εγγραφές.

Βασικές μέθοδοι

  • isEmpty(): Εξετάζει αν το Collection έχει περιεχόμενα ή όχι επιστρέφοντας true/false.
  • size(): Επιστρέφει τον αριθμό των αντικειμένων που περιέχει το Collection ή μηδέν αν είναι άδειο.
  • iterator(): Επιστρέφει ένα Iterator<E> object για την διάτρεξη του Collection.

Εργασίες με πολλαπλές εγγραφές

  • clear() - Διαγράφει όλα τα περιεχόμενα του Collection.
  • containsAll(Collection<?> c) - Επιστρέφει true εάν υπάρχουν όλα τα μέλη της c στην αρχική λίστα. Διαφορετικά επιστρέφει false.
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");
    }
 
  }
}

Στην συνέχεια βάλτε σχόλια στην γραμμή που υποδεικνύουν τα σχόλια και αφαιρέστε το τμήμα του κώδικα που είναι σε σχόλια. Μεταγλωττίστε και τρέξτε. Ποιό είναι το αποτέλεσμα αυτή την φορά; Γιατί συμβαίνει αυτό;

Όταν συγκρίνονται δύο Collections ως προς τα περιεχόμενα τους συγκρίνουμε εάν η πρώτη περιέχει τα ίδια ακριβώς στοιχεία με την δεύτερη, δηλαδή τα ίδια ακριβώς objects. Εάν δημιουργηθούν αντίγραφα των objects της μίας και τοποθετηθούν στην 2η η σύγκριση των περιεχομένων δεν επιστρέφει ισότητα.

* addAll(Collection<?> c) - Προσθέτει όλες τις εγγραφές που περιέχονται στο Collection c.

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();    
  }
} 
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();
 
  }
} 

Και εδώ ισχύει ότι αναφέραμε παραπάνω αναφορικά με την σύγκριση των Collections. Eάν η λίστα sts δημιουργηθεί από αντίγραφα των αντικειμένων της λίστας stl, η μέθοδος removeAll δεν θα αφαιρέσει τίποτα.

java/jfc_intf_collection.1486489643.txt.gz · Last modified: 2017/02/07 17:47 (external edit)