如何在HashMap中获取前10个键值对

时间:2012-03-29 10:32:14

标签: java collections hashmap

我试图只迭代我的Map中的第一个“n”值,是否有任何方法可用或我只需要使用count变量控制它。

下面是一个例子,我已经对一组属于同一城市的名字进行了排序。现在我只想要前10个城市和人名。

for (Map.Entry<String, List<String>> entry : map.entrySet()) {
    List<String> list = entry.getValue();
    // Display list of people in City
}

是否有可以保存固定数量的键值对的Map实现? 请指点一下。

谢谢,

-Vijay Selvaraj

3 个答案:

答案 0 :(得分:9)

  

如何在HashMap

中获取前10个键值对

HashMap is unordered。这使得这个问题不合适(除非“首先”你的意思是“任意”)。

如果您想要一致的键排序,则需要将地图类型更改为SortedMap,例如TreeMap

或者,如果它是你所追求的最古老的元素(即你先插入的元素),那么LinkedHashMap就是答案。

至于实际获取第一个n元素,带有计数器的循环是一种非常合理的方法。

答案 1 :(得分:3)

  

我试图只迭代我的Map中的第一个“n”值,是否有任何可用的方法,或者我只需要使用计数变量来控制它。

您只能使用标准集合API(它仍然比计数器变量IMO稍差)的最接近的事情如下:

List<Map.Entry<String, List<String>> entryList =
        new ArrayList<Map.Entry<String, List<String>>(map.entrySet());

for (Map.Entry<String, List<String>> entry : entryList.subList(0, 10)) {
    List<String> list = entry.getValue();
    // Display list of people in City
}

使用Java 7中的精美钻石可以避免冗长的类型参数:

List<Map.Entry<String, List<String>> entryList = new ArrayList<>(map.entrySet());

或使用迭代键和.get相应的值。

答案 2 :(得分:2)

List<List<string>> list = new ArrayList<List<String>>();
for (Map.Entry<String, List<String>> entry : map.entrySet()) {
  if (list.size() > 9) break;
    list.add(entry.getValue());
}