十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。
10多年的浠水网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。网络营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整浠水建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“浠水网站设计”,“浠水网站推广”以来,每个客户项目都认真落实执行。TreeSet 和 TreeMap 的关系
为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码:
public class TreeSetextends AbstractSet implements NavigableSet , Cloneable, java.io.Serializable { // 使用 NavigableMap 的 key 来保存 Set 集合的元素 private transient NavigableMap m; // 使用一个 PRESENT 作为 Map 集合的所有 value。 private static final Object PRESENT = new Object(); // 包访问权限的构造器,以指定的 NavigableMap 对象创建 Set 集合 TreeSet(NavigableMap m) { this.m = m; } public TreeSet() // ① { // 以自然排序方式创建一个新的 TreeMap, // 根据该 TreeSet 创建一个 TreeSet, // 使用该 TreeMap 的 key 来保存 Set 集合的元素 this(new TreeMap ()); } public TreeSet(Comparator<? super E> comparator) // ② { // 以定制排序方式创建一个新的 TreeMap, // 根据该 TreeSet 创建一个 TreeSet, // 使用该 TreeMap 的 key 来保存 Set 集合的元素 this(new TreeMap (comparator)); } public TreeSet(Collection<? extends E> c) { // 调用①号构造器创建一个 TreeSet,底层以 TreeMap 保存集合元素 this(); // 向 TreeSet 中添加 Collection 集合 c 里的所有元素 addAll(c); } public TreeSet(SortedSet s) { // 调用②号构造器创建一个 TreeSet,底层以 TreeMap 保存集合元素 this(s.comparator()); // 向 TreeSet 中添加 SortedSet 集合 s 里的所有元素 addAll(s); } //TreeSet 的其他方法都只是直接调用 TreeMap 的方法来提供实现 ... public boolean addAll(Collection<? extends E> c) { if (m.size() == 0 && c.size() > 0 && c instanceof SortedSet && m instanceof TreeMap) { // 把 c 集合强制转换为 SortedSet 集合 SortedSet<? extends E> set = (SortedSet<? extends E>) c; // 把 m 集合强制转换为 TreeMap 集合 TreeMap map = (TreeMap ) m; Comparator<? super E> cc = (Comparator<? super E>) set.comparator(); Comparator<? super E> mc = map.comparator(); // 如果 cc 和 mc 两个 Comparator 相等 if (cc == mc || (cc != null && cc.equals(mc))) { // 把 Collection 中所有元素添加成 TreeMap 集合的 key map.addAllForTreeSet(set, PRESENT); return true; } } // 直接调用父类的 addAll() 方法来实现 return super.addAll(c); } ... }