Giriş
Şu satırları dahil ederiz.
TreeSet aynı zamanda SortedSet olduğu için şöyle yapabiliriz.
İmzası şöyledir.
Şöyle yaparız.
TreeSet normalde eklenen nesnelerin Comparable olmasını ister. Eğer nesnemiz Comparable değilse, kendi Comparator gerçekleştirimimiz belirtebiliriz Açıklaması şöyle.
Şu satırları dahil ederiz.
import java.util.SortedSet;
import java.util.TreeSet;
TreeSet altta TreeMap sınıfını kullanır. Açıklaması şöyle. Ekleme ve silme işlemleri sonucu ağacın dengesi bozulmasın diye düz binary tree yerine red-black tree tercih edilmiş.SortedSet Ata SınıfıTreeSet, which stores its elements in a red-black tree, orders its elements based on their values;
TreeSet aynı zamanda SortedSet olduğu için şöyle yapabiliriz.
SortedSet<Integer> sortedSet = new TreeSet<Integer>();
Diamond operator ile şöyle yaparız.SortedSet<Integer> sortedSet
= new TreeSet<>();
constructor - defaultİmzası şöyledir.
public class TreeSet<E>
Şöyle yaparız.TreeSet<MyClass> ts = new TreeSet<>();
constructor - CollectionŞöyle yaparız.
LinkedList<Integer> linkedList = new LinkedList<Integer>();
...
SortedSet<Integer> sortedSet = new TreeSet<Integer>(linkedList);
constructor - ComparatorTreeSet normalde eklenen nesnelerin Comparable olmasını ister. Eğer nesnemiz Comparable değilse, kendi Comparator gerçekleştirimimiz belirtebiliriz Açıklaması şöyle.
İmzası şöyle. Burada E ve E'nin atası comparator ile kullanılabiliyorTreeSet(Comparator comparator)
Constructs a new, empty tree set, sorted according to the specified comparator.
public TreeSet(Comparator<? super E> comparator) {...}
Açıklaması şöyleLet's consider three classes: Drink, Juice extends Drink, and OrangeJuice extends Juice.Örnek
If I want a TreeSet<Juice>, I need a comparator that will compare any two juices. Of course a Comparator<Juice> will do this.
A Comparator<Drink> will also do this, because it is able to compare any two drinks, and thus any two juices.
A Comparator<OrangeJuice> will not do this. If I wanted to add an AppleJuice to my set of juices, that is not compatible with this comparator as it can only compare orange juices.
Şöyle yaparız.
Set<Foo> s = new TreeSet<>(new Comparator<Foo>() {
@Override
public int compare(Foo o1, Foo o2) {
...
}
});
ÖrnekX alanına göre sıralamak için şöyle yaparız.
SortedSet<Point> points = new TreeSet<>(Comparator.comparing(Point::getX));
ÖrnekId alanına göre sıralamak için şöyle yaparız.
TreeSet <Foos> s = new TreeSet<>(
Comparator.nullsFirst( Comparator.comparing ( Foo::getId ) )
);
ÖrnekString sıralamak için şöyle yaparız.
Set<String> languages = new TreeSet<>(String::compareToIgnoreCase);
Örnek
Sadece uzunluğa göre sıralamak için şöyle yaparız. Burada b nesnesini ekleyemedik çünkü aynı uzunlukta a elemanı vardı
Set<String> treeSet = new TreeSet<>(Comparator.comparing(String::length));
treeSet.add("a");
treeSet.add("b");
treeSet.add("aa");
treeSet.add("abc");
System.out.println(treeSet);
// [a, aa, abc]
Eğer TreeSet eklenecek elemanın Comparable olmasını gerektirecek şekilde tanımlanmışsa ve E tipinden değilse
java.lang.ClassCastException
atar. Boolean döner. Şöyle yaparız.if (ts.add(new MyClass()) {...}
addAll metoduÖrnek
Şöyle yaparız.
Collection c = ...;
ts.addAll(c);
ÖrnekŞöyle yaparız
public static <T> Set<T> distinct(
Collection<? extends T> list,
Comparator<? super T> comparator) {
Set<T> set = new TreeSet<>(comparator);
set.addAll(list);
return set;
}
clear metodu
Şöyle yaparız.ts.clear();
contains metoduŞöyle yaparız.
boolean result = ts.contains(element);
first metodu
Şöyle yaparız.
Şöyle yaparız.
int num = ...;
if (num > ts.first()) {...}
remove metodu
Belirtilen elemanı silmek için şöyle yaparız.
int num = ...;
boolean removed = ts.remove (num);
İlk elemanı silmek için şöyle yaparız.ts.remove (ts.first());
removeAll metodu - Comparator Kullanan TreeSet İçin Tehlikeli Bir MetodAçıklaması şöyle.
ÖrnekThis implementation determines which is the smaller of this set and the specified collection, by invoking the size method on each. If this set has fewer elements, then the implementation iterates over this set, checking each element returned by the iterator in turn to see if it is contained in the specified collection. If it is so contained, it is removed from this set with the iterator's remove method. If the specified collection has fewer elements, then the implementation iterates over the specified collection, removing from this set each element returned by the iterator, using this set's remove method.
Elimizde şöyle bir kod olsun.
final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase);
languages.add("java");
languages.add("c++");
languages.add("python");
System.out.println(languages); // [c++, java, python]
Bu koda silinmek üzere bir liste verelim. Listenin uzunluğu TreeSet'in uzunluğundan <= olduğu için silme işlemi TreeSet dolaşılarak yapılır. Bu durumda String::compareToIgnoreCase() kullanılırlanguages.removeAll(Arrays.asList("PYTHON", "C++"));
System.out.println(languages); // [java]
Ancak bu sefer elimizde şöyle bir kod olsun. Listenin uzunluğu TreeSet'in uzunluğundan > olduğu için silme işlemi Liste dolaşılarak yapılır. Bu durumda String::equals() kullanılır. Büyük ve küçük harf string'ler farklı oldukları için silme işlemi gerçekleşmez.languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP"));
System.out.println(languages); // [c++, java, python]
size metoduŞöyle yaparız.
int size = ts.size();
Hiç yorum yok:
Yorum Gönder