TreeMap中put方法研究- 创意小软件开发要塞- JavaEye技术网站
public V put(K key, V value) {
    Entry<K, V> t = root;
    if (t == null) {
        // TBD:
        // 5045147: (coll) Adding null to an empty TreeSet should
        // throw NullPointerException
        //
        // compare(key, key); // type check
        root = new Entry<K, V>(key, value, null);
        size = 1;
        modCount++;
        return null;
    }
    int cmp;
    Entry<K, V> parent;
    // split comparator and comparable paths
    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();
        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<K, V>(key, value, parent);
    if (cmp < 0)
        parent.left = e;
    else
        parent.right = e;
    fixAfterInsertion(e);
    size++;
    modCount++;
    return null;
}

root是这颗红黑树的Entry型节点,主要是比较key,key大的节点成为中心节点的右子节点,key小的成为中心节点的左子节点, fixAfterInsertion(e)方法时在插入后按照以上顺序来修复这棵树,因为插入后可能会形成这种局面:

a

??? b

??? ?? c

修复后:

??? b

a???? c

?

size呢表示树的节点数,也就是key-value mappings数量

?

{zx1}评论

  • 谢谢你的回复,在你启发下我去debug了下程序,的确只有在read()方法的时候当 ...
    -- by

  • 回楼下huayurei:??? 原来的认识是有问题的, 看BufferedRead ...
    -- by

  • wentao365 写道 return obj; 是不是写错了?这里retur ...
    -- by

  • 这个解释是有可能会引起异常,偏偏我怎么设置都不产生异常,搞了我半天都没明白这个ma ...
    -- by

  • return obj; 是不是写错了?
    -- by
郑重声明:资讯 【TreeMap中put方法研究- 创意小软件开发要塞- JavaEye技术网站】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——