我正在使用LinkedHashMap来保证某人尝试访问它时的顺序。但是,当需要遍历它时,使用entrySet()返回键/值对是否也能保证顺序?在迭代时不会进行任何更改。
编辑:此外,通过遍历其键并调用get方法来迭代映射是否会有任何负面影响?
我正在使用LinkedHashMap来保证某人尝试访问它时的顺序。但是,当需要遍历它时,使用entrySet()返回键/值对是否也能保证顺序?在迭代时不会进行任何更改。
编辑:此外,通过遍历其键并调用get方法来迭代映射是否会有任何负面影响?
HashMap
不同,LinkedHashMap 通过维护一个双向链表来遍历所有条目。这个链表定义了迭代顺序,通常是插入键的顺序 (插入顺序)。entrySet()
返回一个Set集合。Jpatrick说,该集合的迭代器让我们拥有一个有序列表,但是http://docs.oracle.com/javase/6/docs/api/java/util/Set.html#iterator()说:“元素没有特定的顺序返回(除非此集合是某个提供保证的类的实例)。”,而且这里引用的文档都没有说entrySet()返回的Set是一个保证顺序的类的实例。我有什么遗漏吗? - LarsHentrySet().iterator()
是一种合理的方式,但它能可靠地依赖吗? - LarsHMap
的Javadoc。 - LarsH如果您确定在迭代期间不会进行任何更改,则使用entrySet()
进行适当排序是有保证的,正如API中所述。
entrySet()
的API文档并未说明其能保证正确排序。该页面上唯一相关的声明是:“该类(即HashMap)不保证映射的顺序;特别是它不能保证顺序随时间保持不变。”你在提供这个链接时指的是什么? - LarsH