2013年8月17日星期六

LinkedHashMap的遍历顺序

我们知道,LinkedHashMap使用双向链表链接所有的entry,链表保证了遍历时的顺序就是key插入的顺序.而且当你重新插入一个key时(即该key已经存在于map中),元素顺序并不受影响.

今天写程序时遇到一个疑问,虽然LinkedHashMap 是保持插入顺序的,那么我们使用entryset进行遍历时是否也保持了插入顺序呢,答案是肯定的!!

根据java map,map接口提供了三种集合结构的视图(view),分别允许把集合看做键的集合,值的集合以及键值对映射的集合.一个集合的顺序也就是在这三种视图上的iterator返回元素的顺序.


所以,使用keyset,values和entryset三种视图对LinkedHashMap遍历,得到的都是元素的插入顺序.

Map map = new LinkedHashMap();
for( int i = 0; i< 1000; ++i)
{
 map.put(i, 2*i);
}
  
for(Entry entry: map.entrySet() )
{
 System.out.println(entry);
}

for( Integer key : map.keySet() )
{
       System.out.println(key  + " " + map.get(key));
}

参考:
1.http://stackoverflow.com/questions/1190083/does-entryset-in-a-linkedhashmap-also-guarantee-order
2.http://www.coderanch.com/t/434260/java/java/LinkedHashMap-keySet
3.http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html

没有评论:

发表评论