首页 > 编程语言 >JDK 1.8 TreeMap源码分析

JDK 1.8 TreeMap源码分析

时间:2023-01-18 17:33:56浏览次数:32  
标签:parent 1.8 TreeMap 源码 key Entry null cmp

/**
     * TreeMap特点:
     *  底层:二叉红黑树 key输入无序,升序排列,null不可以
     *  1.2
     */
public class TreeMap<K,V>
    extends AbstractMap<K,V>
    implements NavigableMap<K,V>, Cloneable, java.io.Serializable
{
   //比较器  可以接收的 否则就默认
    private final Comparator<? super K> comparator;
    //根节点
    private transient Entry<K,V> root;
    //内部结构
        static final class Entry<K,V> implements Map.Entry<K,V> {
        K key;
        V value;
        Entry<K,V> left;//左孩子
        Entry<K,V> right;//右孩子
        Entry<K,V> parent;//父亲节点
        boolean color = BLACK;//颜色
        }
        
        //key 为基础类型,当为自定义的时候需要实现Comparator接口
            public TreeMap() {
        comparator = null;
    }
    //key 为自定义引用类型,当为自定义的时候需要实现Comparator接口
    public TreeMap(Comparator<? super K> comparator) {
        this.comparator = comparator;
    }
    
    public V put(K key, V value) {
        Entry<K,V> t = root;
        //如果root为null,则直接设置为root
        if (t == null) {
            compare(key, key); // type (and possibly null) check
            root = new Entry<>(key, value, null);
            size = 1;
            modCount++;
            return null;
        }
        int cmp;
        Entry<K,V> parent;
        Comparator<? super K> cpr = comparator;
        if (cpr != null) {
            do {
                parent = t;
                cmp = cpr.compare(key, t.key);
                if (cmp < 0)
                    t = t.left;
                else if (cmp > 0)
                    t = t.right;
                else
                    return t.setValue(value);
            } while (t != null);
        }
        else {
            if (key == null)
                throw new NullPointerException();
            @SuppressWarnings("unchecked")
                Comparable<? super K> k = (Comparable<? super K>) key;
            do {
                parent = t;
                cmp = k.compareTo(t.key);
                if (cmp < 0)
                    t = t.left;
                else if (cmp > 0)
                    t = t.right;
                else
                    return t.setValue(value);
            } while (t != null);
        }
        Entry<K,V> e = new Entry<>(key, value, parent);
        if (cmp < 0)
            parent.left = e;
        else
            parent.right = e;
        fixAfterInsertion(e);
        size++;
        modCount++;
        return null;
    }
}

标签:parent,1.8,TreeMap,源码,key,Entry,null,cmp
From: https://www.cnblogs.com/youran-he/p/17060281.html

相关文章

  • JDK 1.8 Hashtable的源码分析
       /**   *Hashtable特点:   * 与hashTable一样1.1效率低,线程安全,key不为null hashMap1.2 效率高,key为null长度11    */publicclassHashta......
  • JDK 1.8 HashMap的源码分析
       /**   *HashMap的特点:   *1.AbstractMapMap冗余   *2.与hashTable一样1.1效率低,线程安全,key不为null hashMap1.2 效率高,key为null ......
  • JDK 1.8 TreeSet 源码分析
       /**   *TreeSet的特点:无序 唯一需要比较器自定义<>中的内容需要实现comparable的接口推荐外部实现:多态,自定义多种规则   *底层实现逻辑:二叉红黑......
  • JDK 1.8 hashset的源码分析
        /**   *hashset的特点:无序 唯一需要比较器自定义<>中的内容需要实现comparable的接口推荐外部实现:多态,自定义多种规则   *底层实现逻辑:数......
  • JDK1.8 Vector 源码相关分析
       /**   *底层实现逻辑:数组线性表查询效率高,修改效率低    *所有的操作类同ArrayList但是synchronize线程安全    *效率低    */public......
  • JDK 1.8 LinkedList 关键代码分析 重要属性和add
       /**   *有序(输入有序),不唯一    *底层实现是双向链表   *易修改,不易查询    */publicclassLinkedList<E>   extendsAbstractSequenti......
  • JDK 1.8 ArrayList源码分析 关键代码
    /***1.ArrayListAbstractList中实现了List接口冗余,作者已经承认*2.RandomAccess可以随机访问,标记接口***/publicclassArrayList<E>extendsAbstractList<E> ......
  • 视频直播app源码,Android TextView省略号代替多出数据
    视频直播app源码,AndroidTextView省略号代替多出数据1、xml实现 android:maxLines=”1”android:ellipsize=”end”<TextView    android:id="@+id/name"  ......
  • 学习笔记——Servlet底层源码分析;Servlet接口;ServletConfig接口;
    2023-01-17 一、Servlet底层源码分析1、Servlet结构图   说明:HttpServlet继承了GenericServlet类,GenericServlet实现了“ServletConfig”和“Servlet”两个接口,......
  • Cesium源码之Label(二)
    我们查看Cesium源码时,有时会发现源码中有大量的includeStart开头的注释,如下图所示。这里面大多是调试信息,当使用gulp打包时,removePragmas参数设置为true,则会删除includeSt......