HashMap,LinkedHashMap,TreeMapの並べ替え研究
HashMapについてLinkedHashMapとTreeMapの値を入れるデフォルトのソートについてネット上でいくつかの記事を見ましたが、
今日は例を作って研究したいと思います.
MapTest.java
実行して、コンソール印刷:
--HashMapp---keyは整数型である--------key:1,value:map 1 value key:2,value:map 2 value key:3,value:map 3 value key:4,value:map 4 value key:5,value:map 5 value---------HashMap-keyは整数型ではない--------key:3,value:map 3 value key:2,value:map 2 value key:1,value:1,value:map 1 value key:5,value:5,value:5,value:5 ue key:4,value:map 4 value--------------------------------------------------
--LinkedHashMap---keyは整数型:2、value:map 2 value key:1、value:map 1 value key:4、value:map 4 value key:3、value:map 3 value key:5、value:map 5 value-----LinkedHashMap- keyは整数型ではない---------------key:2、value:map 2 value:map 2 value key:1、value:map 1 value key:4、value:map 4 value:3、value:map 4 value:3、value:3 ue:map 3 value key:5,value:map 5 value-------------------------------------------------------------------------
--TreeMap---keyは整数型である--------key:1,value:map 1 value key:2,value:map 2 value key:3,value:map 3 value key:4,value:map 4 value key:5,value:map 5 value---------TreeMap-keyは整数型ではない---------------key:1,value:map 1 value:2,value:map 2 value key:3,value:3,value:3,value:4,value:4,value:4,value:4 ue key:5,value:map 5 value--------------------------------------------------
生成されたmap値は無秩序であり、遍歴後に印刷された結果、以下の結論が得られる.
1,HashMap
keyが整数の場合、デフォルトでソートされ、昇順になります.
keyが整数でない場合、デフォルトではソートされず、値を巡回するときはランダムな順序であり、元に入れた順序ではありません.
2,LinkedHashMap
keyは整型でも整型でもないものも並べ替えず、LinkedHashMapは入れ順に遍歴することを保証します.
3,TreeMap
keyは整数または非整数で並べ替えられ、LinkedHashMapはデフォルトで並べ替えられます.
今日は例を作って研究したいと思います.
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
");
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
");
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
");
}
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;
}
}
実行して、コンソール印刷:
--HashMapp---keyは整数型である--------key:1,value:map 1 value key:2,value:map 2 value key:3,value:map 3 value key:4,value:map 4 value key:5,value:map 5 value---------HashMap-keyは整数型ではない--------key:3,value:map 3 value key:2,value:map 2 value key:1,value:1,value:map 1 value key:5,value:5,value:5,value:5 ue key:4,value:map 4 value--------------------------------------------------
--LinkedHashMap---keyは整数型:2、value:map 2 value key:1、value:map 1 value key:4、value:map 4 value key:3、value:map 3 value key:5、value:map 5 value-----LinkedHashMap- keyは整数型ではない---------------key:2、value:map 2 value:map 2 value key:1、value:map 1 value key:4、value:map 4 value:3、value:map 4 value:3、value:3 ue:map 3 value key:5,value:map 5 value-------------------------------------------------------------------------
--TreeMap---keyは整数型である--------key:1,value:map 1 value key:2,value:map 2 value key:3,value:map 3 value key:4,value:map 4 value key:5,value:map 5 value---------TreeMap-keyは整数型ではない---------------key:1,value:map 1 value:2,value:map 2 value key:3,value:3,value:3,value:4,value:4,value:4,value:4 ue key:5,value:map 5 value--------------------------------------------------
生成されたmap値は無秩序であり、遍歴後に印刷された結果、以下の結論が得られる.
1,HashMap
keyが整数の場合、デフォルトでソートされ、昇順になります.
keyが整数でない場合、デフォルトではソートされず、値を巡回するときはランダムな順序であり、元に入れた順序ではありません.
2,LinkedHashMap
keyは整型でも整型でもないものも並べ替えず、LinkedHashMapは入れ順に遍歴することを保証します.
3,TreeMap
keyは整数または非整数で並べ替えられ、LinkedHashMapはデフォルトで並べ替えられます.