User Tools

Site Tools


java:jfc_intf_set

This is an old revision of the document!


Interface java.util.Set και java.util.SortedSet

Το Set είναι ένα Collection το οποίο δεν επιτρέπει διπλές εγγραφές. Συνήθως υλοποιείται μέσω hash table ή ισοζυγισμένου δυαδικού δέντρου αναζητήσεως. Δείτε το παρακάτω παράδειγμα κώδικα που εξηγεί την λειτουργία του Set.

FindDups2.java
import java.util.*;
 
public class FindDups {
 
  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"));
    students.add(new Student("John", "Smith"));
    students.add(new Student("Stanley", "Peters"));
 
    Collection <Student> uniques = new HashSet<Student>();
    Collection <Student> dups = new HashSet<Student>();
 
    for(Student st : students) {
      if(uniques.contains(st))
        dups.add(st);
      else
        uniques.add(st);
    }
 
    uniques.removeAll(dups);
    System.out.println("-- Uniques --");
    print(uniques);
    System.out.println("-- Dups --");
    print(dups);
  }
 
  public static void print(Collection<Student> collection) {
    Iterator<Student> it = collection.iterator();
    while(it.hasNext())
      System.out.println(it.next());
  }
}

Υλοποιήσεις

Βασικές υλοποιήσεις του Set interface είναι οι παρακάτω:

  • HashSet: Υλοποιεί το Set μέσα από ένα HashTable. Γρήγορο στην αναζήτηση. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Set.
  • TreeSet: Υλοποιεί το Set μέσα από ένα Red-Black tree. Ικανοποιητικά γρήγορο. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Η σειρά διάτρεξης είναι η σειρά κατάταξης των στοιχείων, διότι υλοποιεί τον interface SortedSet.
  • LinkedHashSet: Υλοποιεί το Set μέσα από ένα HashTable με παράλληλη χρήση διπλά συνδεδεμένης λίστας. Γρήγορο στην αναζήτηση. Εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα, λόγω της ύπαρξης της λίστας. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Set.
java/jfc_intf_set.1584033399.txt.gz · Last modified: 2020/03/12 17:16 (external edit)