哈希映射迭代

时间:2013-09-27 21:23:34

标签: iterator hashmap

如何遍历哈希映射以查找前10个元素,例如,如果我的地图包含字符串作为键而int作为值,我想获取具有最高整数的前10个值?

3 个答案:

答案 0 :(得分:1)

假设我们有Map,我们可以使用外部库 - Guava

Map<String, Integer> map = Maps.newTreeMap();
        map.put("A", 13);
        map.put("B", 11);
        map.put("C", 27);
        map.put("D", 38);
        map.put("E", 25);
        map.put("F", 12);
        map.put("G", 25);
        map.put("D", 35);
        map.put("H", 28);
        map.put("R", 13);
        map.put("N", 24);
        map.put("T", 37);

创建番石榴MultiMap并添加原始map

中的条目
  Multimap<String, Integer> multiMap = ArrayListMultimap.create();
      for(String key : map.keySet()){
          multiMap.put(key, map.get(key));
      }

反向multiMap并复制到TreeMultiMap

  TreeMultimap<Integer, String> reversed = TreeMultimap.create();
  Multimaps.invertFrom(multiMap, reversed);

从条目中创建List并获得前10个元素:

Lists.newArrayList(reversed.entries()).subList(0,10)

答案 1 :(得分:0)

如果这是一次性事情,你可以通过转换为List然后回到LinkedHashMap来对HashMap进行排序:

    Map<String, Integer> map = new HashMap<>();
    map.put("A", 13);
    map.put("B", 11);
    map.put("C", 27);
    map.put("D", 38);
    map.put("E", 25);
    map.put("F", 12);
    map.put("G", 25);
    map.put("D", 35);
    map.put("H", 28);
    map.put("R", 13);
    map.put("N", 24);
    map.put("T", 37);

    // Take a List copy of the Map
    List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(map.entrySet());

    // Sort the list by the Value
    Collections.sort(list, new Comparator<Entry<String, Integer>>() {
        @Override
        public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
            return (o1.getValue()).compareTo(o2.getValue());
        }
    });

    // Create new Map (use LinkedHashMap to maintain order)
    Map<String, Integer> sortedMap = new LinkedHashMap<String, Integer>();
    for (Entry<String, Integer> entry : list) {
        sortedMap.put(entry.getKey(), entry.getValue());
    }

答案 2 :(得分:-1)

大多数HashMaps不保留任何类型的顺序,因此您可能需要读取所有键,对它们进行排序,然后从Hash中获取相应的值。如果您能告诉我们什么语言并提供一些示例代码,那么有人可能会提供进一步的帮助。