【发布时间】:2019-10-18 11:25:21
【问题描述】:
如何以特定的所需顺序迭代 Map? 我目前有一个 HashMap 并且希望能够定义一个特定的迭代顺序。用户应该可以更改订单。
我的第一个想法是使用 LinkedHashMap,因为它会给我一个条目的顺序,但遗憾的是,实现只按插入顺序或访问顺序对它们进行排序。除了使用删除操作插入顺序之外,我认为 LinkedHashMap 不适合该任务。 Imo 的实现方式与文档所说的有所不同。
我还找到了 SortedMap,但它使用了一个比较器,所以每次我想遍历条目时都需要评估它。这可能是一个解决方案,但有点昂贵:O(n*log(n))。
到目前为止,Andreas 的评论似乎是最好的解决方案,它同时具有 HashMap 和 ArrayList。
【问题讨论】:
-
“有没有更简单的方法?” 没有,除了可能建立一个新列表,无需从旧列表中单独删除项目。
-
如果您想控制订单,请使用单独的
List(数组、链接等)和直接的HashMap。将它们包装在一个使它们保持同步的类中可能会很好。 -
是的,
LinkHashMap可能不是您所需要的。 -
您知道它们总是按插入顺序放入其中。没有“通常”。
-
澄清一下:“可预测的迭代顺序”措辞是因为
LinkedHashMap支持 2 个(并且仅 2 个)迭代顺序。默认(又名最常用,又名“通常”使用)顺序是 insertion-order,另一个是 access-order。该类不支持任何其他迭代排序。
标签: java dictionary iteration linkedhashmap