HashMap,LinkedHashMap,TreeMapの並べ替え研究


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
"); 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はデフォルトで並べ替えられます.