TreeMap.putAll给出键超出范围

时间:2014-09-18 20:11:09

标签: java

在我的代码中,

            SortedMap<Integer, Data> subMap;

            subMap = (db.getDataMap()).tailMap(previousServer);

            SortedMap<Integer, Data>  temp = (db.getDataMap()).headMap(presentServer);
            //System.out.println(subMap);
            //System.out.println(temp);
            subMap.putAll(temp);

假设tailMap()什么都不返回,所以subMap是一个空的Map,但是temp的键值对很少。 因此,通过subMap.putAll(temp)向subMap添加temp会给我“键超出范围”。 但是,如果我做temp.putAll(subMap),那么一切正常。

这可能是什么原因?

2 个答案:

答案 0 :(得分:1)

http://docs.oracle.com/javase/7/docs/api/java/util/SortedMap.html#tailMap(K)

注意:有几种方法返回带有受限键范围的子图。这样的范围是半开放的,即它们包括它们的低端点但不包括它们的高端点(如果适用)。如果您需要一个封闭范围(包括两个端点),并且密钥类型允许计算给定密钥的后继,则只需从lowEndpoint请求子范围到后继(highEndpoint)。例如,假设m是键是字符串的映射。下面的习惯用法获得一个视图,其中包含m中键值介于低和高之间的所有键值映射,包括:

SortedMap<String, V> sub = m.subMap(low, high+"\0");

可以使用类似的技术生成开放范围(既不包含端点)。下面的习惯用法获得一个视图,其中包含m中键值介于低位和高位之间的所有键值映射,不包括:

SortedMap<String, V> sub = m.subMap(low+"\0", high);

答案 1 :(得分:0)

来自docs

的陈述
IllegalArgumentException if fromKey is greater than toKey; or if this map itself has a restricted range, and fromKey or toKey lies outside the bounds of the range