====== Τα interfaces SortedSet και SortedMap ======
===== java.util.SortedSet =====
Τo interface //SortedSet// είναι ένα //Set// που διατηρεί τα στοιχεία του σε αύξουσα σειρά με βάση την υλοποίηση του interface //Comparable// ή ενός //Comparator// για τον συγκεκριμένο τύπο δεδομένων. Οι επιπλέον μέθοδοι του συγκεκριμένου interface είναι οι εξής
* **[[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).
iimport java.util.*;
public class NameSortedSet {
static final Comparator NameOrdering =
new Comparator() {
public int compare(Name n1, Name n2) {
int cmp = n1.firstName().compareTo(n2.firstName() );
return (cmp != 0 ? cmp : n1.lastName().compareTo(n2.lastName() ));
}
};
public static void main(String[] args) {
SortedSet names = new TreeSet(NameOrdering);
names.add(new Name("Bob", "Travolta"));
names.add(new Name("John", "Smith"));
names.add(new Name("Karl", "Ng"));
names.add(new Name("Jeff", "Smith"));
names.add(new Name("Tom", "Rich"));
for(Name n: names)
System.out.println(n);
System.out.println("\n***Print headset***");
SortedSet subnames = names.headSet(new Name("Karl", "Ng"));
for(Name n: subnames)
System.out.println(n);
System.out.println("\n***Print tailset***");
subnames = names.tailSet(new Name("Karl", "Ng"));
for(Name n: subnames)
System.out.println(n);
}
}
Στο παραπάνω παράδειγμα δείτε πως αλλάζει η κατάταξη αν αφαιρέσετε τον //Comparator// από τον κατασκευαστή του αντικειμένου //names//.
===== java.util.SortedMap =====
Τo interface //SortedMap// είναι ένα //Map// που διατηρεί τα κλειδιά του σε αύξουσα σειρά με βάση την υλοποίηση του interface //Comparable// ή της κλάσης Comparator τα κλειδιά. Οι επιπλέον μέθοδοι του συγκεκριμένου interface είναι οι εξής
* **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#firstKey()|firstKey()]] - ** Επιστρέφει το 1ο κλειδί.
* **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#lastKey()|lastKey()]] - ** Επιστρέφει το τελευταίο κλειδί.
* **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#headMap(K)|headMap(K toKey)]] - ** Επιστρέφει το υποσύνολο του Map που τα κλειδιά του είναι μικρότερα από την τιμή //toKey//.
* **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#tailMap(K)|tailMap(K fromKey)]] - ** Επιστρέφει το υποσύνολο του Map που τα κλειδιά του του είναι μεγαλύτερα ή ίσα από την τιμή //fromKey//.
* **[[http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#subMap(K,%20K)|subMap(K fromKey, K toKey)]] - ** Επιστρέφει το υποσύνολο του Set από fromKey (μαζί με το fromKey) έως toKey (χωρίς το toKey).
import java.util.*;
public class NameProperty {
private String email;
private String address;
public NameProperty(String mail, String address) {
this.email = mail;
this.address = address;
}
public String getEmail() { return email; }
public String getAddress() { return address; }
public void setEmail(String mail) { email = mail; }
public void setAddress(String address) { this.address = address; }
public String toString() { return "email: "+email+", address: "+address; }
}
import java.util.*;
public class NameSortedMap {
static final Comparator NameOrdering =
new Comparator() {
public int compare(Name n1, Name n2) {
int cmp = n1.firstName().compareTo(n2.firstName() );
return (cmp != 0 ? cmp : n1.lastName().compareTo(n2.lastName() ));
}
};
public static void main(String[] args) {
SortedMap users = new TreeMap(NameOrdering);
users.put(new Name("Bob", "Travolta"), new NameProperty("bob@travolta.com", "Gklavani 37, 1st floor") );
users.put(new Name("John", "Smith"), new NameProperty("john@smith.com", "Gklavani 37, 2nd floor") );
users.put(new Name("Karl", "Ng"), new NameProperty("karl@ng.com", "Gklavani 37, 3rd floor") );
users.put(new Name("Jeff", "Smith"), new NameProperty("jeff@smith.com", "Gklavani 37, 4th floor") );
users.put(new Name("Tom", "Rich"), new NameProperty("tom@rich.com", "Gklavani 37, 5tht floor") );
for(Map.Entry u: users.entrySet())
System.out.println(u);
System.out.println("\n***Print headmap***");
SortedMap subusers = users.headMap(new Name("Karl", "Ng"));
for(Map.Entry u: subusers.entrySet())
System.out.println(u);
System.out.println("\n***Print tailmap***");
subusers = users.tailMap(new Name("Karl", "Ng"));
for(Map.Entry u: subusers.entrySet())
System.out.println(u);
}
}