public NavigableMap<K,V> subMap(K fromKey,
boolean fromInclusive,
K toKey,
boolean toInclusive)
从界面复制的描述:NavigableMap返回此地图部分的视图 其键的范围从fromKey到toKey。如果fromKey和toKey是 等于,除非fromInclusive和toInclusive,否则返回的地图为空 都是真的。返回的地图由此地图支持,因此更改 返回的地图会反映在此地图中,反之亦然。 返回的地图支持此地图的所有可选地图操作 支持。
这个函数是否创建了新的地图对象?什么存储在返回对象中?
答案 0 :(得分:4)
此函数是否会创建新的地图对象?
是的,但是这个Map
对象没有地图中包含键和值的节点的新副本。如果更改基础地图,则可以更改此地图。
答案 1 :(得分:1)
是的,它会创建一个新的地图实例,但新地图中的对象会引用旧地图中的对象。 因此,两个地图中呈现的对象的所有修改在两个地图上都是可见的,因为对象是相同的。
请注意,即使它是一个新的实例Map。它不是一个经典的全功能Map实例。您无法添加新元素,只需替换或删除subMap范围内的元素。
修改强>
返回的映射将在尝试在其范围之外插入键时抛出IllegalArgumentException,或者构造其端点位于其范围之外的子映射。
例如,在JDK 1.6的包静态类NavigableSubMap中:
public final V put(K key, V value) {
if (!inRange(key))
throw new IllegalArgumentException("key out of range");
return m.put(key, value);
}
public final V remove(Object key) {
return !inRange(key) ? null : m.remove(key);
}
考虑并将subMap用作一般的subCollection(例如subList)作为原始地图的视图范围限制,这是一个很好的做法。