【问题标题】:Retrieving last n values from treemap从树形图中检索最后 n 个值
【发布时间】:2012-09-04 03:23:54
【问题描述】:

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

【问题讨论】:

标签: java map treemap


【解决方案1】:

如果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()));
}

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      获取 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)));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-04
        • 2021-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-26
        相关资源
        最近更新 更多