日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

容器源码分析之TreeSet(五)

發布時間:2024/2/28 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 容器源码分析之TreeSet(五) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HashSet是借助于HashMap的key不允許重復這個特性來實現的。HashMap是操作鍵值對,而HashSet是操作HashMap的key完成相關操作,TreeSet比HashSet加了排序的功能,那是不是TreeSet也因應該是通過操作TreeMap來實現的呢?
right!!

先把HashSet的鏈接發上來,一樣的部分就不多解釋了:
容器源碼分析之HashSet(四)

1.TreeSet的繼承結構

public class TreeSet<E> extends AbstractSet<E>implements NavigableSet<E>, Cloneable, java.io.Serializable

2.TreeSet的屬性

private transient NavigableMap<E,Object> m;// Dummy value to associate with an Object in the backing Mapprivate static final Object PRESENT = new Object();

這樣看起來其實TreeSet跟HashSet一樣,區別是HashSet的Map成員是HashMap,而TreeSet的Map成員是NavigableMap接口,為什么是NavigableMap接口而不直接是TreeMap呢?
Effective Java之通過接口引用對象(五十二)

3. TreeSet的構造函數

//傳mapTreeSet(NavigableMap<E,Object> m) {this.m = m;}//默認public TreeSet() {this(new TreeMap<E,Object>());}//定制排序方式public TreeSet(Comparator<? super E> comparator) {this(new TreeMap<>(comparator));}//傳集合public TreeSet(Collection<? extends E> c) {this(); addAll(c); }

從上述可以看出,TreeSet的構造函數都是通過新建一個TreeMap作為實際存儲Set元素的容器,所以TreeSet里絕大部分方法都是直接調用 TreeMap 的方法來實現的。

4. TreeSet的常用方法

public boolean add(E e) {return m.put(e, PRESENT)==null;}public Iterator<E> iterator() {return m.keySet().iterator();}public int size() {return m.size();}public boolean isEmpty() {return m.isEmpty();}public boolean contains(Object o) {return m.containsKey(o);}public boolean add(E e) {return m.put(e, PRESENT)==null;}public boolean remove(Object o) {return m.remove(o)==PRESENT;}public void clear() {m.clear();}

這些方法和HashSet常用方法幾乎一模一樣

總結

以上是生活随笔為你收集整理的容器源码分析之TreeSet(五)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。