User Tools

Site Tools


java:jfc_intf_set

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_set [2017/02/07 17:51] gthanosjava:jfc_intf_set [Unknown date] (current) – external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Interface java.util.Set ======+====== Interface java.util.Set και java.util.SortedSet ======
  
-Το [[http://docs.oracle.com/javase/7/docs/api/java/util/Set.html|Set]] είναι ένα Collection το οποίο δεν επιτρέπει διπλές εγγραφές. Δείτε το παρακάτω παράδειγμα κώδικα που εξηγεί την λειτουργία του //Set//.+===== java.util.Set =====
  
-<code java FindDups2.java+Το [[http://docs.oracle.com/javase/7/docs/api/java/util/Set.html|java.util.Set]] είναι ένα Collection το οποίο δεν επιτρέπει διπλές εγγραφές. Συνήθως υλοποιείται μέσω hash table ή ισοζυγισμένου δυαδικού δέντρου αναζητήσεως. 
-public class FindDups2 { +
-  public static void main(String[] args) { +
-    Set<String> uniques = new HashSet<String>(); +
-    Set<String> dups    = new HashSet<String>();+
  
-    for (String a args) +Εάν υλοποιηθεί μέσω HashTable η κλάση της οποίας τα αντικείμενα αποθηκεύονται πρέπει να υλοποιούν τις μεθόδους [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-|Object.equals]] και [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--|Object.hashCode]]. Εάν υλοποιηθεί μέσω Binary Tree τότε πρέπει να υλοποιείται το //interface// [[https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html|java.lang.Comparable]].
-      if (!uniques.add(a)) +
-        dups.add(a);+
  
-    // Destructive set-difference +Δείτε το παρακάτω παράδειγμα κώδικα που εξηγεί την λειτουργία του [[http://docs.oracle.com/javase/7/docs/api/java/util/Set.html|java.util.Set]].
-    uniques.removeAll(dups);+
  
-    System.out.println("Unique words:    uniques); +<code java FindDuplicateStudents.java> 
-    System.out.println("Duplicate words: dups);+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());
   }   }
 } }
 </code> </code>
-Ένα ενδεικτικό τρέξιμο είναι το παρακάτω + 
-<code> +===== java.util.SortedSet ===== 
-$> java FindDups2 me you me he he her see me you + 
-Unique words:    [seeher] +Τo interface [[http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html|java.util.SortedSet]] είναι απόγονος του interface [[http://docs.oracle.com/javase/7/docs/api/java/util/Set.html|java.util.Set]] , το οποίο έχει την επιπλέον ιδιότητα να διατηρεί τα στοιχεία του σε ταξινομημένα αύξουσα σειρά με βάση την υλοποίηση του interface //Comparable// ή ενός //Comparator// για τον τύπο δεδομένων που αποθηκεύει. Οι επιπλέον μέθοδοι του συγκεκριμένου interface είναι οι εξής 
-Duplicate words[youme, he]+  * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html#first()|first()]] - ** Επιστρέφει το 1ο στοιχείο από το //Set//. 
 +  * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html#last()|last()]] - ** Επιστρέφει το τελευταίο στοιχείο από το //Set//. 
 +  * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html#headSet(E)|headSet(E toElement)]] - ** Επιστρέφει το υποσύνολο του Set που τα στοιχεία του είναι μικρότερα από την τιμή //toElement//
 +  * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html#tailSet(E)|tailSet(E fromElement)]] - ** Επιστρέφει το υποσύνολο του Set που τα στοιχεία του είναι μεγαλύτερα ή ίσα από την τιμή //fromElement//
 +  * **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html#subSet(E,%20E)|subSet(E fromElement, E toElement)]] - ** Επιστρέφει το υποσύνολο του Set από fromElement (μαζί με το fromElement) έως toElement (χωρίς το toElement). 
 + 
 +<code java 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 nstudents) 
 +      System.out.println(n); 
 +       
 +    System.out.println("\n***Print headset***"); 
 +       
 +    SortedSet<Student> subStudents = students.headSet(new Student("Mary""Poppins")); 
 +    for(Student ssubStudents) 
 +      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); 
 +  } 
 +}
 </code> </code>
  
Line 31: Line 93:
  
 Βασικές υλοποιήσεις του [[https://docs.oracle.com/javase/7/docs/api/java/util/Set.html|Set]] interface είναι οι παρακάτω: Βασικές υλοποιήσεις του [[https://docs.oracle.com/javase/7/docs/api/java/util/Set.html|Set]] interface είναι οι παρακάτω:
-  * **[[https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html|HashSet]]:** Υλοποιεί το Set μέσα από ένα [[wp>Hash_table|HashTable]]. Γρήγορο στην αναζήτηση. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Set. +  * **[[https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html|HashSet]]:** Υλοποιεί το Set μέσα από ένα [[wp>Hash_table|HashTable]]. Γρήγορο στην αναζήτηση. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Set. Προκειμένου να είμαστε σε θέση να εντοπίσουμε διπλές εγγραφές η παράμετρος κλάση του [[https://docs.oracle.com/javase/7/docs/api/java/util/HashSet.html|HashSet]] θα πρέπει να υλοποιεί τις μεθόδους [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-|public boolean equals(Object obj)]] και [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--|public int hashCode()]] της κλάσης [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html|java.lang.Object]]
-  * **[[https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html|TreeSet]]:** Υλοποιεί το Set μέσα από ένα [[wp>Red-black_tree|Red-Black tree]]. Πιο αργό στην αναζήτηση, αλλά επίσης αρκετά γρήγορο. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Η σειρά διάτρεξης είναι η σειρά κατάταξης των στοιχείων (υλοποιεί τον interface [[http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html|SortedSet]])+  * **[[https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html|TreeSet]]:** Υλοποιεί το Set μέσα από ένα [[wp>Red-black_tree|Red-Black tree]]. Ικανοποιητικά γρήγορο. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Η σειρά διάτρεξης είναι η σειρά κατάταξης των στοιχείων, διότι υλοποιεί και το interface [[http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html|SortedSet]]. Προκειμένου να είμαστε σε θέση να εντοπίσουμε διπλές εγγραφές η παράμετρος κλάση του [[https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html|TreeSet]] θα πρέπει να υλοποιεί το //interface// [[https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html|java.lang.Comparable]]
-  * **[[https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html|LinkedHashSet]]:** Υλοποιεί το Set μέσα από ένα [[wp>Hash_table|HashTable]] με παράλληλη χρήση διπλά διασυνδεδεομένης λίστας. Γρήγορο στην αναζήτηση. Εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα, λόγω της ύπαρξης της λίστας. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Set.+  * **[[https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html|LinkedHashSet]]:** Υλοποιεί το Set μέσα από ένα [[wp>Hash_table|HashTable]] με παράλληλη χρήση διπλά συνδεδεμένης λίστας. Γρήγορο στην αναζήτηση. Εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα, λόγω της ύπαρξης της λίστας. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Set. Προκειμένου να είμαστε σε θέση να εντοπίσουμε διπλές εγγραφές ισχύει η απαίτηση υλοποίησης των μεθόδων [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-|public boolean equals(Object obj)]] και [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--|public int hashCode()]] της κλάσης [[https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html|java.lang.Object]].
  
 +|Προηγούμενο: [[:java:jfc_intf_collection | Interface java.util.Collections  ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:jfc_intf_list| Interface java.util.List  ]] |
java/jfc_intf_set.1486489867.txt.gz · Last modified: 2017/02/07 17:51 (external edit)