A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘占月 中级黑马   /  2012-4-9 22:08  /  1322 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

HashCode与 HashTable 有什么迥异啊? 哪个应用的多点?

2 个回复

倒序浏览
(1)Hashtable是java语言实现哈希表的特性的一个类,充分实现了哈希表查询效率高的优点。底层编码不知道,只知道设计的很优秀,使用时可以直接Hashtable实例.put(key,value),此外还有多种方法。详见http://www.zhuoda.org/Jason/21164.html

    (2)equals()和hashcode()这两个方法都是从object类中继承过来的。equals()在Object类中的定义是

    public boolean equals(Object obj)

  {
        return (this == obj); //==永远是比较两个对象的地址值
  }

    但是我们必需清楚,当String 、Math、还有Integer、Double等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法,也就是说是进行内容的比较。

    (3)hashcode() 方法,在object类中定义如下:
    public native int hashCode(); <完>
    说明是一个本地方法,它的实现是根据本地机器相关的。当然我们可以在自己写的类中覆盖hashcode()方法,比如String、Integer、 Double等等这些类都是覆盖了hashcode()方法的。

    也就是说,hashcode()是用来得到实例的哈希码值,equals()是用来判断两个对象内容是否相同或者是否就是同一个对象。

    比如java的集合类Set中不允许有重复的元素,如果集合中现在已经有1000个元素,那么第1001个元素加入集合时,它就要调用1000次equals方法。这显然会大大降低效率。当集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相同就散列其它的地址。

    所以,Java对于eqauls方法和hashCode方法是这样规定的:1、如果两个对象相同,那么它们的hashCode值一定要相同;2、如果两个对象的hashCode相同,它们并不一定相同     上面说的对象相同指的是用eqauls方法比较,即内容相同。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
HashCode是对象的散列码,不同对象不同的散列码。

HashTable是一种数据结构,以(值,关键字)形式存储。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马