Java中的TreeSet源碼解讀
更新時間:2023年09月13日 09:41:14 作者:風過無痕2018
這篇文章主要介紹了Java中的TreeSet源碼解讀,TreeSet 是一個 有序集合,它擴展了 AbstractSet 類并實現了 NavigableSet 接口,對象根據其自然順序以升序排序和存儲,該 TreeSet 中使用 平衡樹,更具體的一個 紅黑樹,需要的朋友可以參考下
TreeSet源碼解讀
特點: 可以排序
解讀
- 當我們使用無參構造器[new TreeSet();] 創(chuàng)建TreeSet時,仍然是無序的
- 如果希望添加的元素,按照字符串大小來排序
- 使用TreeSet 提供的一個構造器[ new TreeSet(new Comparator()],可以傳入一個比較器(匿名內部類) 并指定排序規(guī)則
看看TreeMap(Comparator<? super K> comparator)的源碼
- 構造器把傳入的比較器對象,賦給 TreeSet的底層的 TreeMap的屬性this.comparator
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}- 在 調用 treeSet.add(“tom”), 在底層會執(zhí)行到 [TreeMap類里的add()方法]
Comparator<? super K> cpr = comparator; //把之前TreeMap里的比較器賦給cpr
if (cpr != null) {//cpr 就是我們的匿名內部類(對象)
do {
parent = t;
cmp = cpr.compare(key, t.key); //動態(tài)綁定到我們的匿名內部類(對象)compare
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else //如果相等,即返回0,這個Key就沒有加入
return t.setValue(value);
} while (t != null);
}實際應用
TreeSet treeSet = new TreeSet(new Comparator() {
@Override
public int compare(Object o1, Object o2) {
//下面 調用String的 compareTo方法進行字符串大小比較
//return ((String) o2).compareTo((String) o1);
//如果老韓要求加入的元素,按照長度大小排序
return ((String) o1).length() - ((String) o2).length();
}
});到此這篇關于Java中的TreeSet源碼解讀的文章就介紹到這了,更多相關TreeSet源碼解讀內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

