顾名思义LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护的是一个具有双重链表的HashMap,LinkedHashMap支持2中排序一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 M1 M2 M3 M4,使用M3后为 M1 M2 M4 M3了,LinkedHashMap输出时其元素是有顺序的,而HashMap输出时是随机的,如果Map映射比较复杂而又要求高效率的话,最好使用LinkedHashMap,但是多线程访问的话可能会造成不同步,所以要用Collections.synchronizedMap来包装一下,从而实现同步。其实现一般为:
    Map<String String> map = Collections.synchronizedMap(new LinkedHashMap(<String String));

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import  Java.util.HashMap;
import  java.util.Iterator;
import  java.util.LinkedHashMap;
import  java.util.Map; 
public  class  TestLinkedHashMap {
   public  static  void  main(String args[])
   {
    System.out.println( "*************************LinkedHashMap*************" );
    Map<Integer,String> map =  new  LinkedHashMap<Integer,String>();
    map.put( 6 "apple" );
    map.put( 3 "banana" );
    map.put( 2 , "pear" );
    
    for  (Iterator it =  map.keySet().iterator();it.hasNext();)
    {
     Object key = it.next();
     System.out.println( key+ "=" + map.get(key));
    }
    
    System.out.println( "*************************HashMap*************" );
    Map<Integer,String> map1 =  new   HashMap<Integer,String>();
    map1.put( 6 "apple" );
    map1.put( 3 "banana" );
    map1.put( 2 , "pear" );
    
    for  (Iterator it =  map1.keySet().iterator();it.hasNext();)
    {
     Object key = it.next();
     System.out.println( key+ "=" + map1.get(key));
    }
   }
}
运行结果如下:
*************************LinkedHashMap*************
6 =apple
3 =banana
2 =pear
*************************HashMap**************************
2 =pear
6 =apple
3 =banana
分析:LinkedHashmap 的特点是put进去的对象位置未发生变化,而HashMap会发生变化。