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)对,根据键得到值,因此键不允许键重复,但允许值重复。
View Code
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 HashMapLinkedHashMap11 {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
来源:https://www.cnblogs.com/paulbai/archive/2012/03/26/2417506.html
