当前位置: 代码迷 >> J2SE >> hash map有关问题
  详细解决方案

hash map有关问题

热度:610   发布时间:2016-04-24 13:49:44.0
hash map问题
import   java.util.*;

public   class   HashMapTest   {

public   static   void     printElements(Collection   c){
Iterator   it=c.iterator();
while(it.hasNext()){
System.out.println(it.next());

}
}
public   static   void   main(String[]   args){

HashMap   hm=new   HashMap();
/*hm.put( "one ",   "zhangsan ");
hm.put( "two ",   "lisi ");
hm.put( "three ", "wangwu ");*/
hm.put( "1 ",   "zhangsan ");
hm.put( "2 ",   "lisi ");
hm.put( "3 ", "wangwu ");

//System.out.println(hm.get( "one "));
//System.out.println(hm.get( "two "));
//System.out.println(hm.get( "three "));

/*Set   keys=hm.keySet();
System.out.println( "keys: ");
printElements(keys);

Collection   values=hm.values();
System.out.println( "values: ");
printElements(values);*/

Set   es=hm.entrySet();                   //System.out.println(es);
Iterator   it   =   es.iterator();
while(it.hasNext()){
Map.Entry   me=(Map.Entry)it.next();
System.out.println(me.getKey()+ ": "+me.getKey());
}
}
}

上面的程序是孙鑫java第六课的一个例子程序,程序中hashmap的put方法如果放进去的key是英文字母酒会按照顺序输出,但是如果是数字就会反序输出(我猜可能是hashCode方法需要重写,但是不知道该怎么重写,如果是这样的话,该怎么重写,如果不是       请指教一下),而且如果是数字的话下面的迭代输出也有问题
正常情况应该是键:值
而传递数字key进取就会输出
3:3
2:2
1:1


只能放30分了,回答正确的等下我再开个帖子给100分,现在赚分去了...



------解决方案--------------------
真辛苦 不仅要赚钱 还得赚分 休息去了!
------解决方案--------------------
hashmap类是散列映射并不保证它的元素顺序.
因此,元素加入散列映射的顺序并不一定是它们被迭代函数读出的顺序.
------解决方案--------------------
楼上正解,碰到这种问题查api。api说不保证顺序,那就是不保证拉
------解决方案--------------------
楼上的楼上,正解。
------解决方案--------------------
HashMap 类没有分类或者排序。它允许一个 null 键和多个 null 值。
------解决方案--------------------
java编程思想里对这些讲的很清楚的 推荐楼主去看看
------解决方案--------------------
以上都说得没错
如果你多运行几次
看看 结果会每次都不同
当然也有可能相同
------解决方案--------------------
我运行了很多次 都是一样的结果
重启机子运行也是一样的结果

我也知道hash的顺序带随机性 所以向重写hashCode方法
但是不知道怎么下手....
------解决方案--------------------
System.out.println(me.getKey()+ ": "+me.getKey());

老大,你自己打印出来的都是KEY阿!!!
System.out.println(me.getKey()+ ": "+me.getValue());

你第一个问题想问点什么呢
------解决方案--------------------
只能放30分了,回答正确的等下我再开个帖子给100分,现在赚分去了...
________________________________________________________________

怎么赚?每天登录一次,才能赚到 10 分,100 分登录十天每天至少登录一次才够~~


要保证输入与输出的顺序一致的话,要使用 LinkedHashMap 就可以了,在 Map 中仅有这个是按顺序来的。

使用 HashMap 的话,是按照 hashCode 来分布的,没有降序、升序规律可循的。
------解决方案--------------------