按顺序迭代HashMap

问题描述 投票:0回答:3

我有一个 HashMap。

它有数百个数百万的观察结果。

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

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

java collections
3个回答
6
投票

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

import static java.util.Comparator.comparing;

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

这显然会涉及对未排序的键进行排序,这是有代价的。因此,您需要决定是否要使用 TreeMap 预先支付费用,还是在需要时继续使用 HashMap。


2
投票

如果您的插入顺序与键的顺序相同,那么您可以使用LinkedHashMap

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


2
投票

您无法按顺序(例如键的数字顺序)迭代

HashMap
。您遇到
HashMap
的键/值/条目的迭代顺序取决于实现,不应依赖。

您可以使用

TreeMap
来表示所需的迭代顺序。如果您使用
LinkedHashMap
,您可以按照将键插入
Map
的顺序进行迭代,但这仍然不是您想要的(除非您按数字顺序插入键)。

© www.soinside.com 2019 - 2024. All rights reserved.