HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key已经按照hashcode排序号了,这种几率非常小)
单纯的HashMap是无法实现排序的,这的排序是指,我们将键值对按照一定的顺序put进HashMap里,然后在进行取键值对的操作的时候,是按照put进去的顺序把键值对取出来的。
JAVA在JDK1.4以后提供了LinkedHashMap来帮助我们实现了有序的HashMap!
LinkedHashMap取键值对时,是按照你放入的顺序来取的。
顾名思义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));
HashMap,LinkedHashMap,TreeMap都属于Map
Map 主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。
1 import java.text.CollationKey;
2 import java.text.Collator;
3 import java.util.Comparator;
4 import java.util.HashMap;
5 import java.util.Iterator;
6 import java.util.LinkedHashMap;
7 import java.util.Map;
8 import java.util.TreeMap;
9
10 public class HashMapLinkedHashMap
11 {
12 public static void main(String args[])
13 {
14 System.out.println("*************************LinkedHashMap*************");
15 Map<String,String> linkedHashMap = new LinkedHashMap<String,String>();
16 linkedHashMap.put("3", "apple");
17 linkedHashMap.put("2", "pear");
18 linkedHashMap.put("4", "origane");
19 linkedHashMap.put("1","banana");
20
21 for (Iterator it = linkedHashMap.keySet().iterator();it.hasNext();)
22 {
23 Object key = it.next();
24 System.out.println( key+"="+ linkedHashMap.get(key));
25 }
26
27 System.out.println("*************************HashMap*************");
28 Map<String,String> haspMap = new HashMap<String,String>();
29 haspMap.put("3", "apple");
30 haspMap.put("2", "pear");
31 haspMap.put("4", "origane");
32 haspMap.put("1","banana");
33 for (Iterator it = haspMap.keySet().iterator();it.hasNext();)
34 {
35 Object key = it.next();
36 System.out.println( key+"="+ haspMap.get(key));
37 }
38
39 System.out.println("*************************TreeMap*************");
40 Map<String,String> treeMap = new TreeMap<String, String>(
41 new Comparator<Object>()
42 {
43 Collator collator = Collator.getInstance();
44 public int compare(Object o1,Object o2)
45 {
46 CollationKey key1 = collator.getCollationKey(o1.toString());
47 CollationKey key2 = collator.getCollationKey(o2.toString());
48 return key1.compareTo(key2);
49 }
50 });
51 treeMap.put("3", "apple");
52 treeMap.put("2", "pear");
53 treeMap.put("4", "origane");
54 treeMap.put("1","banana");
55 for (Iterator it = treeMap.keySet().iterator();it.hasNext();)
56 {
57 Object key = it.next();
58 System.out.println( key+"="+ treeMap.get(key));
59 }
60
61 }
62
63
64 }
*************************LinkedHashMap*************
3=apple
2=pear
4=origane
1=banana
*************************HashMap*************
3=apple
2=pear
1=banana
4=origane
*************************TreeMap*************
1=banana
2=pear
3=apple
4=origane