从treemap中检索最后n个值

时间:2012-09-11 08:25:06

标签: java map treemap

我只想从树图中检索最后n个值而不考虑地图中的任何键或值。但我真的不知道如何做到这一点。下面是一段代码示例,它可以从地图中提取前5条记录。如何修改它以从地图中检索最后n条记录?

Map startValues = new ArrayList<Map.Entry<String, Integer>>(5);
iterator = sortedMap.entrySet().iterator();
for (int i1 = 0; iterator.hasNext() && i1 < 5; i1++) {
    startValues.add(iterator.next());
}

3 个答案:

答案 0 :(得分:3)

如果sortedMap变量包含TreeMap的实例,请使用descendingKeySet()。它返回包含在其中的键的相反顺序。

Map startValues = new ArrayList<Map.Entry<String, Integer>>(5);
iterator = sortedMap.descendingKeySet().iterator();
for (int i1 = 0; iterator.hasNext() && i1 < 5; i1++) {
   startValues.add(sortedMap.get(iterator.next()));
}

请注意,与原始代码相比,这会迭代,而非条目。我没有对其进行测试编译,因此可能存在泛型和类型转换的小问题,但希望主要想法足够明确。

答案 1 :(得分:1)

在创建时订阅由TreeMap对象维护的Comparator。如果未提供Comparator,则自然排序

创建实现反向排序Comparator的最简单的解决方案,将此比较器传递给新的TreeMap,并将旧的treemap中的所有元素添加到新的。这样,您可以重复使用代码示例来检索最后5条记录。

答案 2 :(得分:0)

获取map.keySet()并将其转换为ArrayList,然后您可以使用循环获取最后n个值,如下例所示:

Map<Integer, String> map = new HashMap<>();

map.put(1, "Praveen");
map.put(2, "shristi");
map.put(3, "tarang");
Set<Integer> keys = map.keySet();
ArrayList<Integer> list = new ArrayList<>(keys);
for(int i=1;i<list.size();i++) {
  System.out.println(map.get(list.get(i)));
}