我们在方法中定义一个新的TreeMap并将其传递给另一个方法:
doSomething()
doSomething(Map aMap){
//Make a new copy of
TreeMap aTreeMap = new TreeMap(aMap);
}
如下:
evalf()
新的TreeMap会采用数据吗?!
答案 0 :(得分:5)
查看documentation you link to上TreeMap
的实施情况,
它有这些构造函数(以及其他):
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) {
}
}
因此,当您从TreeMap
或Map
(例如另一个SortedMap
)创建新的TreeMap
时会有所不同。如果是后者,则不会重新排序。
答案 1 :(得分:2)
我已经检查了Java 8的TreeMap
源代码,根据我的理解,它在调用构造函数TreeMap (Map<? extends K, ? extends V>)
时不会重新排序地图。
构造函数调用putAll (Map<? extends K, ? extends V> map)
,在此方法中,如果map
是SortedMap
的实例,则将值按当前顺序添加到地图中(通过私有方法) buildFromSorted (...)
),否则每个条目最终都会通过put (...)
方法添加,该方法会在将条目添加到地图时对条目进行排序。