关于hashCode、equals、Hashtable
来源:互联网 发布:淘宝客服人工电话400 编辑:程序博客网 时间:2024/05/19 21:04
(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方法比较,即内容相同。
引用自http://edu.codepub.com/2009/1005/16144_2.php
- 关于hashCode、equals、Hashtable
- hashtable里面关于equals和hashcode的覆盖重写问题
- 关于equals和hashCode
- 关于hashcode()和equals()
- 关于equals() 和hashcode()
- 关于equals() 和hashcode()
- 关于重写equals,hashcode
- 关于hashCode与equals
- 关于hashcode和equals
- Hashtable记录,重写equals和 hashcode方法
- 关于equals()和hashCode()方法
- 关于“==”、equals()、hashCode()
- 关于hashcode和equals方法
- 关于equals和hashcode方法
- 关于equals,==,hashCode
- Java中Hashtable的应用之重载hashCode和equals
- Hashset、Hashmap、Hashtable与hashcode()和equals()的密切关系
- 关于Object的equals()及hashCode()
- ActiveMQ in Action(5)
- HibernateDaoSupport.java
- 设计模式之———代理模式
- ASN.1相关网站
- ActiveMQ in Action(6)
- 关于hashCode、equals、Hashtable
- 手工破解windows密码
- VIGGIE GREEN 产品研发的神奇内幕
- Java堆和栈的区别 经典总结
- 初始化列表
- fn 标签
- 图形块传送操作
- VIGGIE GREEN告诉你有利于瘦身的几大营养要素
- blackberry widget开发技术提高(二)