如果TreeMap作为Map传递给它,Treemap是否会求助

时间:2016-03-02 15:58:41

标签: java sorting hashmap

我们在方法中定义一个新的TreeMap并将其传递给另一个方法:

doSomething()

doSomething(Map aMap){ //Make a new copy of TreeMap aTreeMap = new TreeMap(aMap); } 如下:

evalf()

新的TreeMap会采用数据吗?!

2 个答案:

答案 0 :(得分:5)

查看documentation you link toTreeMap的实施情况, 它有这些构造函数(以及其他):

public TreeMap(Map<? extends K, ? extends V> m) {
    comparator = null;
    putAll(m);
}

public TreeMap(SortedMap<K, ? extends V> m) {
    comparator = m.comparator();
    try {
        buildFromSorted(m.size(), m.entrySet().iterator(), null, null);
    } catch (java.io.IOException cannotHappen) {
    } catch (ClassNotFoundException cannotHappen) {
    }
}

因此,当您从TreeMapMap(例如另一个SortedMap)创建新的TreeMap时会有所不同。如果是后者,则不会重新排序。

答案 1 :(得分:2)

我已经检查了Java 8的TreeMap源代码,根据我的理解,它在调用构造函数TreeMap (Map<? extends K, ? extends V>)时不会重新排序地图。

构造函数调用putAll (Map<? extends K, ? extends V> map),在此方法中,如果mapSortedMap的实例,则将值按当前顺序添加到地图中(通过私有方法) buildFromSorted (...)),否则每个条目最终都会通过put (...)方法添加,该方法会在将条目添加到地图时对条目进行排序。