linwenks 2012-03-31 00:00
浏览 170
已采纳

重写hashcode()方法后,HashMap变成升序?

public class ObjTest{

private Integer id;

public boolean equals(Object obj) {
    if(obj instanceof ObjTest) {
        ObjTest ojb = (ObjTest) obj;
        if(this.id.intValue() == ojb.id.intValue()) {
            return true;
        }
    }
    return false;
}

public int hashCode() {
    return id;
}

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

}

public class HashMapTest {

private static Map<ObjTest, Integer> map = new HashMap<ObjTest, Integer>();

private static void init() {
    ObjTest obj1 = new ObjTest();
    obj1.setId(3);
    ObjTest obj2 = new ObjTest();
    obj2.setId(2);
    ObjTest obj3 = new ObjTest();
    obj3.setId(1);

    map.put(obj1, 3);
    map.put(obj2, 2);
    map.put(obj3, 1);

    for(Map.Entry<ObjTest, Integer> e : map.entrySet()) {
        ObjTest obj = (ObjTest) e.getKey();
        System.out.println("key:" + obj.getId());
    }
}


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

}

结果:
key:1
key:2
key:3

求解?

  • 写回答

2条回答 默认 最新

  • UltraNi 2012-03-31 20:44
    关注

    你为什么要关心hashmap遍历元素时的顺序呢?
    它之所以在这里是升序,完全是因为你改变了hashmap在进行散列是否的逻辑,当你把ObjTest id得值取其他很大的时候,就不一定是升序的了

    关于hashmap进行hash的过程可以参考以下文章:
    http://www.ibm.com/developerworks/cn/java/j-lo-hash/?ca=dgr-cn-javaeye0912

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)