79

当有人尝试访问它时,我正在使用linkedHashMap 来保证顺序。但是,当需要对其进行迭代时,使用 entrySet() 返回键/值对是否也能保证顺序?迭代时不会进行任何更改。

编辑:此外,通过遍历其键并调用 get 来遍历映射是否有任何不利影响?

4

3 回答 3

56

根据Javadocs,是的。

此实现的不同之处HashMap在于它维护一个贯穿其所有条目的双向链表。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。

至于编辑,不,它应该可以正常工作。但是条目集要快一些,因为它避免了在迭代期间查找映射中每个键的开销。

于 2009-07-27T19:25:56.937 回答
2

如果您确定在迭代期间不会进行任何更改,则entrySet()可以保证正确排序,如API中所述。

于 2009-07-27T19:27:52.440 回答
1

这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入到地图中,则插入顺序不会受到影响。(如果在调用 m.containsKey(k) 将在调用之前立即返回 true 时调用 m.put(k, v),则将键 k 重新插入到映射 m 中。)

于 2009-07-27T19:24:33.537 回答