Table of Contents

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

java.util.Set

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

Εάν υλοποιηθεί μέσω HashTable η κλάση της οποίας τα αντικείμενα αποθηκεύονται πρέπει να υλοποιούν τις μεθόδους Object.equals και Object.hashCode. Εάν υλοποιηθεί μέσω Binary Tree τότε πρέπει να υλοποιείται το interface java.lang.Comparable.

Δείτε το παρακάτω παράδειγμα κώδικα που εξηγεί την λειτουργία του java.util.Set.

FindDuplicateStudents.java
import java.util.*;
 
public class FindDuplicateStudents{
 
  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());
  }
}

java.util.SortedSet

Τo interface java.util.SortedSet είναι απόγονος του interface java.util.Set , το οποίο έχει την επιπλέον ιδιότητα να διατηρεί τα στοιχεία του σε ταξινομημένα αύξουσα σειρά με βάση την υλοποίηση του interface Comparable ή ενός Comparator για τον τύπο δεδομένων που αποθηκεύει. Οι επιπλέον μέθοδοι του συγκεκριμένου interface είναι οι εξής

StudentSortedSet.java
import java.util.*;
 
public class StudentSortedSet {
 
  public static void main(String[] args) {
 
    SortedSet<Student> students = new TreeSet<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"));
    students.add(new Student("Tom", "Rich"));
    for(Student n: students)
      System.out.println(n);
 
    System.out.println("\n***Print headset***");
 
    SortedSet<Student> subStudents = students.headSet(new Student("Mary", "Poppins"));
    for(Student s: subStudents)
      System.out.println(s);
 
    System.out.println("\n***Print tailset***");
 
    subStudents = students.tailSet(new Student("Mary", "Poppins"));
    for(Student s: subStudents)
      System.out.println(s);
  }
}

Υλοποιήσεις

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