java – 如何从HashMap或LinkedHashMap获取有限数量的值?

假设我有一个包含216个条目的LinkedHashMap,我如何从LinkedHashMap< Integer,Object>获取前100个值(此处为Object类型).

解决方法:

丑陋的单线

这个丑陋的单线程会做(并在问题的情况下返回一个ArrayList< Object>):

Collections.list(Collections.enumeration(lhMap.values())).subList(0, 100)

这也适用于HashMap,但HashMap由HashSet支持,并不保证您将获得输入的前100个值;它适用于其他类型,具有类似的限制.

笔记:

>相对低效(阅读Javadoc知道原因 – 虽然情况更糟!),
>使用视图时要小心(阅读Javadoc了解更多信息),
>我确实提到它很难看.

循序渐进的用法示例

(根据OP的评论)

Map<Integer, Pair<Double, SelectedRoad>> hashmap3 =
  new LinkedHashMap<Integer, Pair<Double, SelectedRoad>>();

// [...] add 216 elements to hasmap3 here somehow

ArrayList<Pair<Double,SelectedRoad>> firstPairs = 
  Collections.list(Collections.enumeration(hashmap3.values())).subList(0, 100)

// you can then view your Pairs' SelectedRow values with them with:
//  (assuming that:
//    - your Pair class comes from Apache Commons Lang 3.0
//    - your SelectedRoad class implements a decent toString() )
for (final Pair<Double, SelectedRoad> p : firstPairs) {
    System.out.println("double: " + p.left);
    System.out.println("road  : " + p.right);
}
上一篇:Java集合框架


下一篇:如何在JSONObject中保留LinkedHashMap排序?