3

我只想从树形图中检索最后 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());
}
4

3 回答 3

4

如果sortedMap变量包含 a 的实例,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()));
}

请注意,与原始代码相比,它迭代的是,而不是条目。我没有对其进行测试编译,因此泛型和类型转换可能存在一些小问题,但希望主要思想足够清楚。

于 2012-09-11T08:31:33.663 回答
1

在创建时由对象TreeMap维护的排序。Comparator如果Comparator未提供 - 这是自然排序

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

于 2012-09-11T08:31:20.833 回答
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)));
}
于 2018-01-05T09:32:36.143 回答