首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

为何hashSet可以按字母排序,而HashMap不能按键的顺序排序?

2013-08-09 
为什么hashSet可以按字母排序,而HashMap不能按键的顺序排序??package testimport java.util.HashMapimpo

为什么hashSet可以按字母排序,而HashMap不能按键的顺序排序??

package test;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
// import java.util.TreeMap;

public class HashMapTest
{
public static void main(String[] args)
{
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1, "liudehua");
hm.put(3, "zhangxueyou");
hm.put(2, "liming");
hm.put(4, "guofucheng");

Iterator<Map.Entry<Integer, String>> it = 
hm.entrySet().iterator();

while(it.hasNext())
{
Map.Entry<Integer, String> m = it.next();
System.out.println(m.getKey()+":"+m.getValue());
//System.out.println(it.next().ge);
}

String str = 
"abcdsafasfdasfasfdasdfasfdsfaf";

Map<Character,Integer> mapCI = new HashMap<Character,Integer>();

for(int i = 1;i<str.length();i++)
{
if(!mapCI.containsKey(str.charAt(i)))
mapCI.put(str.charAt(i), 1);
else
mapCI.put(str.charAt(i),mapCI.get(str.charAt(i))+1);
}

Iterator<Map.Entry<Character, Integer>> it2
= mapCI.entrySet().iterator();

while(it2.hasNext())
{
Map.Entry<Character, Integer> m = it2.next();
System.out.println(m.getKey()+" : " + m.getValue());
}
}
}


输出:
1:liudehua
2:liming
3:zhangxueyou
4:guofucheng
f : 8
d : 5
s : 7
b : 1
c : 1
a : 7

对数字可以排序,但是对字母无法排序 ??

字母的 hashcode 是不是也应该有一个顺序呢 ???
[解决办法]
数字,那是碰巧,LZ试试这组数字:
        HashMap<Integer,String> hm = new HashMap<Integer,String>();
        hm.put(97, "liudehua");
        hm.put(98, "liming");
        hm.put(99, "zhangxueyou");


        hm.put(100, "guofucheng");

当数值比较小的时候,put方法的hash操作,恰好按数值顺序放到散列表里了。

热点排行