按顺序迭代HashMap

时间:2015-01-23 19:27:24

标签: java collections

我有一个HashMap。

它有数以百万计的观察结果。

按键的数字顺序迭代HashMap元素的最佳方法是什么?

我考虑过更改为TreeMap,但没有这样做,因为它实际上可能会增加创建Map的负担(因为TreeMap是O(n),HashMap是O(1))。

3 个答案:

答案 0 :(得分:5)

使用Java 8,您可以使用类似于以下内容的内容:

import static java.util.Comparator.comparing;

map.entrySet().stream()
   .sorted(comparing(Entry::getKey))
   .forEach(e -> doSomethingWithTheEntry(e));

这显然会涉及对未分类的密钥进行排序,这将付出代价。因此,您需要决定是否要使用TreeMap预先支付成本,或者在需要时继续使用HashMap。

答案 1 :(得分:2)

您无法按顺序迭代HashMap。您必须使用TreeMap。如果您使用LinkedHashMap,则可以按键插入Map的顺序进行迭代,但它仍然不是您想要的(除非您按数字顺序插入键)。

答案 2 :(得分:2)

如果您的广告订单与您的密钥订单相同,那么您可以使用LinkedHashMap

  

Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入地图,则插入顺序不会受到影响。 (如果m.containsKey(k)在调用之前立即返回true,则调用m.put(k,v)时,将密钥k重新插入到映射m中。)