2012-03-13 62 views
5

我知道.keySet()返回一个无序的集合。hashmap.keyset()会按照它们添加到散列表的顺序返回键吗?

据我所知,这意味着我需要保留一个数组列表的键,以便跟踪键被添加到散列表的顺序,是正确的?

+1

[Behavior of LinkedHashMap's keySet()and values()methods](http://stackoverflow.com/questions/9583650/behaviour-of-linkedhashmaps-keyset-and-values方法) – 2012-03-13 19:24:42

+0

虽然这是对“* HashMap's * keySet方法的行为”的评论。 – aioobe 2012-03-13 19:57:38

回答

8

这意味着我需要保持一个数组列表的键,以便跟踪键添加到散列表的顺序,是否正确?

是的,没错。或者,您可以使用LinkedHashMap这为您做。

从文档:

[...]此实现与HashMap的不同之处在于它保持于所有条目的运行双向链表。此链接列表定义了迭代排序,这通常是密钥在映射(插入顺序)中插入的顺序。 [...]

+0

另一种可能性是TreeMap。请注意,所有这些类都是保证迭代将按顺序进行,而不是由keySet()返回的Set将具有任何特定顺序。 – 2012-03-13 19:17:36

+0

链接的哈希映射看起来像我需要的。我如何覆盖removeEldestEntry,使其只通过插入顺序 - 而不是访问顺序? – bernie2436 2012-03-13 19:19:20

+0

嗯。不清楚访问顺序是什么意思。最年长的条目可能是首次插入的关键。 – aioobe 2012-03-13 19:20:32

相关问题