我有一个HashMap。
它有数以百万计的观察结果。
按键的数字顺序迭代HashMap元素的最佳方法是什么?
我考虑过更改为TreeMap,但没有这样做,因为它实际上可能会增加创建Map的负担(因为TreeMap是O(n),HashMap是O(1))。
答案 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中。)