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\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默认会排序。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值