| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 510 人关注过本帖
标题:关于Hashtable类的hashcode
只看楼主 加入收藏
jingzitakk66
Rank: 1
等 级:新手上路
帖 子:198
专家分:0
注 册:2009-5-1
结帖率:98.68%
收藏
已结贴  问题点数:10 回复次数:2 
关于Hashtable类的hashcode
有个问题不是很明白,书上说当比较Hashtable对象的key是否相同时必须覆盖equals()方法和hashCode()方法,我觉的光覆盖eauals方法就可以了啊。因为只要两个对象的内容相等,我们就能判断是相同的键值了啊。
搜索更多相关主题的帖子: Hashtable hashcode 
2010-08-25 17:08
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:10 
Hashtable的put方法
程序代码:
    public synchronized V put(K key, V value) {
    // Make sure the value is not null
    if (value == null) {
        throw new NullPointerException();
    }

    // Makes sure the key is not already in the hashtable.
    Entry tab[] = table;
    int hash = key.hashCode();
    int index = (hash & 0x7FFFFFFF) % tab.length;
    for (Entry<K,V> e = tab[index] ; e != null ; e = e.next) {
        if ((e.hash == hash) && e.key.equals(key)) {   //这里写着当hash值相等并且equals相等时才会被认为是同一个key,会覆盖原有的value
        V old = e.value;
        e.value = value;
        return old;
        }
    }


hash算法就是根据hash值确定唯一的对象,所以自然会去调用hashCode()方法计算哈希值,如果不覆盖,那么即便自己建的对象中属性完全一样,只要是new的不同实例,那么算出的哈希值就是不同的,会被认为是不同的key。

[ 本帖最后由 shellingford 于 2010-8-25 21:08 编辑 ]
2010-08-25 21:03
快速回复:关于Hashtable类的hashcode
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042435 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved