SortedSet, NavigableSet, TreeSet
SortedSet
Interfața SortedSet este destinată pentru crearea colecțiilor care păstrează elementele într-o ordine sortată (sortare crescătoare). SortedSet extinde interfața Set, ceea ce înseamnă că această colecție stochează doar valori unice. SortedSet oferă următoarele metode:
- E first(): returnează primul element din set
- E last(): returnează ultimul element din set
- SortedSet<E> headSet(E end): returnează un obiect SortedSet care conține toate elementele setului până la elementul end
- SortedSet<E> subSet(E start, E end): returnează un obiect SortedSet care conține toate elementele între start și end
- SortedSet<E> tailSet(E start): returnează un obiect SortedSet care conține toate elementele începând de la elementul start
NavigableSet
Interfața NavigableSet extinde interfața SortedSet și permite extragerea elementelor pe baza valorilor acestora. NavigableSet definește următoarele metode:
- E ceiling(E obj): caută în set cel mai mic element e, care este mai mare sau egal cu obj (e >= obj). Dacă un astfel de element este găsit, acesta este returnat; altfel, returnează null
- E floor(E obj): caută în set cel mai mare element e, care este mai mic sau egal cu obj (e <= obj). Dacă este găsit, este returnat; altfel, returnează null
- E higher(E obj): caută cel mai mic element e, care este mai mare decât obj (e > obj). Dacă este găsit, este returnat; altfel, returnează null
- E lower(E obj): caută cel mai mare element e, care este mai mic decât obj (e < obj). Dacă este găsit, este returnat; altfel, returnează null
- E pollFirst(): returnează primul element și îl elimină din set
- E pollLast(): returnează ultimul element și îl elimină din set
- NavigableSet<E> descendingSet(): returnează un NavigableSet care conține toate elementele setului în ordine inversă
- NavigableSet<E> headSet(E upperBound, boolean incl): returnează un NavigableSet care conține toate elementele setului până la upperBound. Parametrul incl, dacă este true, include elementul upperBound în setul rezultat
- NavigableSet<E> tailSet(E lowerBound, boolean incl): returnează un NavigableSet care conține toate elementele începând de la lowerBound. Parametrul incl, dacă este true, include elementul lowerBound în set
- NavigableSet<E> subSet(E lowerBound, boolean lowerIncl, E upperBound, boolean highIncl): returnează un NavigableSet care conține elementele între lowerBound și upperBound. Parametrii lowerIncl și highIncl indică dacă aceste limite sunt incluse în set
TreeSet
Clasa generalizată TreeSet<E> reprezintă o structură de date sub forma unui arbore, în care toate obiectele sunt stocate în ordine crescătoare. TreeSet moștenește clasa AbstractSet și implementează interfața NavigableSet, iar prin aceasta, și SortedSet.
Constructorii din clasa TreeSet sunt următorii:
- TreeSet(): creează un arbore gol
- TreeSet(Collection<? extends E> col): creează un arbore care adaugă toate elementele din colecția col
- TreeSet(SortedSet<E> set): creează un arbore care adaugă toate elementele din setul sortat set
- TreeSet(Comparator<? super E> comparator): creează un arbore gol, în care elementele adăugate vor fi sortate ulterior de comparator
TreeSet suportă toate metodele standard pentru inserarea și eliminarea elementelor:
import java.util.TreeSet;
public class Program{
public static void main(String[] args) {
TreeSet<String> states = new TreeSet<String>();
// adăugăm în listă câteva elemente
states.add("Germany");
states.add("France");
states.add("Italy");
states.add("Great Britain");
System.out.printf("TreeSet conține %d elemente \n", states.size());
// eliminarea unui element
states.remove("Germany");
for(String state : states){
System.out.println(state);
}
}
}
Deoarece obiectele sunt sortate în ordine crescătoare la inserare, la afișarea în bucla for, vom obține un set sortat:
TreeSet contains 4 elements
France
Great Britain
Italy
Întrucât TreeSet implementează interfața NavigableSet, și implicit SortedSet, putem aplica diverse metode pe structura de arbore:
import java.util.*;
public class Program{
public static void main(String[] args) {
TreeSet<String> states = new TreeSet<String>();
// adăugăm în listă câteva elemente
states.add("Germany");
states.add("France");
states.add("Italy");
states.add("Spain");
states.add("Great Britain");
System.out.println(states.first()); // primul - cel mai mic element
System.out.println(states.last()); // ultimul - cel mai mare element
// obținem un subset de la un element la altul
SortedSet<String> set = states.subSet("Germany", "Italy");
System.out.println(set);
// element din set care este mai mare decât cel curent
String greater = states.higher("Germany");
// element din set care este mai mic decât cel curent
String lower = states.lower("Germany");
// setul în ordine inversă
NavigableSet<String> navSet = states.descendingSet();
// setul cu toate elementele mai mici decât cel curent
SortedSet<String> setLower = states.headSet("Germany");
// setul cu toate elementele mai mari decât cel curent
SortedSet<String> setGreater = states.tailSet("Germany");
System.out.println(navSet);
System.out.println(setLower);
System.out.println(setGreater);
}
}