关于HashMap,LinkedHashMap 和 TreeMap放入值的默认排序从网上看了些文章,
今天想做个例子研究一下
MapTest.java
package org.maptest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
public class MapTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("-----HashMap-------key是整型-----------");
MapTest.printValueFromMap(MapTest.getOneHashMap("HashMap",true));
System.out.println("-----HashMap-------key不是整型-----------");
MapTest.printValueFromMap(MapTest.getOneHashMap("HashMap",false));
System.out.println("-------------------------------------------------------------\r\n");
System.out.println("-----LinkedHashMap-------key是整型-----------");
MapTest.printValueFromMap(MapTest.getOneHashMap("LinkedHashMap",true));
System.out.println("-----LinkedHashMap-------key不是整型-----------");
MapTest.printValueFromMap(MapTest.getOneHashMap("LinkedHashMap",false));
System.out.println("-------------------------------------------------------------\r\n");
System.out.println("-----TreeMap-------key是整型-----------");
MapTest.printValueFromMap(MapTest.getOneHashMap("TreeMap",true));
System.out.println("-----TreeMap-------key不是整型-----------");
MapTest.printValueFromMap(MapTest.getOneHashMap("TreeMap",false));
System.out.println("-------------------------------------------------------------\r\n");
}
public static void printValueFromMap(Map mm){
for(Iterator it=mm.keySet().iterator();it.hasNext();){
Object key=(Object)it.next();
Object value=(Object)mm.get(key);
System.out.println("key:"+key.toString()+",value:"+value.toString());
}
}
//根据maptype声明一个Map,并根据isInt是不是整型作为键值
public static Map getOneHashMap(String maptype,boolean isInt){
Map mm=null;
if(maptype==null||maptype.trim().equals("")||maptype.trim().equals("HashMap")){
mm=new HashMap();
}else if(maptype.trim().equals("LinkedHashMap")){
mm=new LinkedHashMap();
}else if(maptype.trim().equals("TreeMap")){
mm=new TreeMap();
}else{
mm=new HashMap();
}
//key值是否是整型
if(isInt){
mm.put(2, "map2value");
mm.put(1, "map1value");
mm.put(4, "map4value");
mm.put(3, "map3value");
mm.put(5, "map5value");
}else{
mm.put("2", "map2value");
mm.put("1", "map1value");
mm.put("4", "map4value");
mm.put("3", "map3value");
mm.put("5", "map5value");
}
return mm;
}
}
运行一下,控制台打印:
-----HashMap-------key是整型-----------
key:1,value:map1value
key:2,value:map2value
key:3,value:map3value
key:4,value:map4value
key:5,value:map5value
-----HashMap-------key不是整型-----------
key:3,value:map3value
key:2,value:map2value
key:1,value:map1value
key:5,value:map5value
key:4,value:map4value
-------------------------------------------------------------
-----LinkedHashMap-------key是整型-----------
key:2,value:map2value
key:1,value:map1value
key:4,value:map4value
key:3,value:map3value
key:5,value:map5value
-----LinkedHashMap-------key不是整型-----------
key:2,value:map2value
key:1,value:map1value
key:4,value:map4value
key:3,value:map3value
key:5,value:map5value
-------------------------------------------------------------
-----TreeMap-------key是整型-----------
key:1,value:map1value
key:2,value:map2value
key:3,value:map3value
key:4,value:map4value
key:5,value:map5value
-----TreeMap-------key不是整型-----------
key:1,value:map1value
key:2,value:map2value
key:3,value:map3value
key:4,value:map4value
key:5,value:map5value
-------------------------------------------------------------
生成的map放值时是无序的,遍历后打印的结果可以得出一下结论:
1,HashMap
key是整型时会默认排序,而且是升序;
key不是整型时,默认不排序,并且遍历取值时是随机的顺序,不是原先放入的顺序。
2,LinkedHashMap
key是整型或者不是整型都不排序,LinkedHashMap保证按放入顺序遍历。
3,TreeMap
key是整型或者不是整型都排序,LinkedHashMap默认会排序。