LinkedHashMap中的entrySet()是否也保证了订单?

Die*_*ego 67 java linkedhashmap

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

编辑:此外,迭代通过其键并调用get迭代地图是否有任何不利影响?

Mic*_*ers 51

Javadocs说,是的.

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

至于编辑,不,它应该工作得很好.但是入口集有点快,因为它避免了在迭代期间查找映射中的每个键的开销.

  • 但是entrySet返回一个自身无序的Set? (14认同)
  • 是的,从技术上讲,entrySet本身无法访问位置,但是entrySet.iterator()可以.迭代器让我们有一个有序列表. (5认同)
  • 在这里找到了一个明确的答案:http://stackoverflow.com/a/2924143/423105"地图的顺序被定义为地图集合视图上的迭代器返回其元素的顺序." - 用于`Map`的javadoc (4认同)
  • 我想知道这个答案是正确的,但正如Jonathan指出的那样,`entrySet()`返回一个Set.Jpatrick说集合的迭代器允许我们有一个有序列表,但http://docs.oracle.com/javase/6/docs/api/java/util/Set.html#iterator()说"元素返回no特定顺序(除非此集是某个提供保证的类的实例)." 这里引用的文档都没有说entrySet()返回一个Set,它是一个保证顺序的类的实例.我错过了什么吗? (2认同)