当有人尝试访问它时,我正在使用linkedHashMap 来保证顺序。但是,当需要对其进行迭代时,使用 entrySet() 返回键/值对是否也能保证顺序?迭代时不会进行任何更改。
编辑:此外,通过遍历其键并调用 get 来遍历映射是否有任何不利影响?
当有人尝试访问它时,我正在使用linkedHashMap 来保证顺序。但是,当需要对其进行迭代时,使用 entrySet() 返回键/值对是否也能保证顺序?迭代时不会进行任何更改。
编辑:此外,通过遍历其键并调用 get 来遍历映射是否有任何不利影响?
根据Javadocs,是的。
此实现的不同之处
HashMap
在于它维护一个贯穿其所有条目的双向链表。这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。
至于编辑,不,它应该可以正常工作。但是条目集要快一些,因为它避免了在迭代期间查找映射中每个键的开销。
如果您确定在迭代期间不会进行任何更改,则entrySet()
可以保证正确排序,如API中所述。
这个链表定义了迭代顺序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入到地图中,则插入顺序不会受到影响。(如果在调用 m.containsKey(k) 将在调用之前立即返回 true 时调用 m.put(k, v),则将键 k 重新插入到映射 m 中。)