HashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key已经按照hashcode排序号了,这种几率非常小)
单纯的HashMap是无法实现排序的,这的排序是指,我们将键值对按照一定的顺序put进HashMap里,然后在进行取键值对的操作的时候,是按照put进去的顺序把键值对取出来的。
JAVA在JDK1.4以后提供了LinkedHashMap来帮助我们实现了有序的HashMap!
LinkedHashMap取键值对时,是按照你放入的顺序来取的。
EG:
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
/**
* TEANA E-mail: mmz06@163.com
* 创建时间:2011-1-21 下午02:23:07
* LinkedHashMap与HashMap
*/
public class LinkedMap
{
public static void main(String[] args)
{
//LinkedHashMap 有序
Map maps = new LinkedHashMap();
maps.put("1", "张三");
maps.put("2", "李四");
maps.put("3", "王五");
maps.put("4", "赵六");
System.out.println("LinkedHashMap(有序):");
Iterator it = maps.entrySet().iterator();
while(it.hasNext())
{
Map.Entry entity = (Entry) it.next();
System.out.println("[ key = " + entity.getKey() +
", value = " + entity.getValue() + " ]");
}
//HashMap 无序
Map map = new HashMap();
map.put("1", "张三");
map.put("2", "李四");
map.put("3", "王五");
map.put("4", "赵六");
it = null;
System.out.println("HashMap(无序):");
it = map.entrySet().iterator();
while(it.hasNext())
{
Map.Entry entity = (Entry) it.next();
System.out.println("[ key = " + entity.getKey() +
", value = " + entity.getValue() + " ]");
}
}
}
执行结果如下:
LinkedHashMap(有序):
[ key = 1, value = 张三 ]
[ key = 2, value = 李四 ]
[ key = 3, value = 王五 ]
[ key = 4, value = 赵六 ]
HashMap(无序):
[ key = 3, value = 王五 ]
[ key = 2, value = 李四 ]
[ key = 1, value = 张三 ]
[ key = 4, value = 赵六 ]