hashcode和equals
来源:互联网 发布:传奇加载物品数据库 编辑:程序博客网 时间:2024/06/05 08:37
1、hashcode数据结构中的散列表,它的查询时间复杂度是O(1),在java中hashcode()方法是由Object类实现的本地方法,带有native关键字。
public native int hashCode();
2、hashcode一般在java中用于HashMap和HashSet(本质还是调用的hashMap的方法),为了快速的通过key查找到对应的value值。(可以去看hashmap源码分析,主要是put方法和get方法),给一个HashMap源码分析的地址。
http://blog.csdn.net/ghsau/article/details/16843543
3、在java中,使用equals方法会默认先比较对象的hashcode,所以在重写equals方法时,必须先重写hashcode,在比较两个对象是否为同一个对象时,(两个对象的hashcode不一样,则不是同一个对象,hashcode一样,再比较equals方法),默认Object中的equals方法是比较的对象的地址。
public boolean equals(Object obj) { return (this == obj); }
1)如果hashcode一样,再调用equals方法,比较对象的地址,如果不一样,则添加
2)如果hashcode不一样,则不是同一个对象,可以添加
5、测试set
1)正常的添加对象
public static void main(String[] args) {Set<Animal> set = new HashSet();Animal am1 = new Animal(12);Animal am2 = new Animal(12);set.add(am1);set.add(am2);set.add(new Animal(12));set.add(new Animal(12));System.out.println("Animal对象的数量:"+set.size());}
class Animal{int age;public Animal(int age){this.age=age;}public int getAge(){return age;}}这里输出的结果是: Animal对象的数量:4
2)重写了hashcode和equals(我这里认为年龄一样就是同一个动物对象)
public static void main(String[] args) {Set<Animal> set = new HashSet();Animal am1 = new Animal(12);Animal am2 = new Animal(12);set.add(am1);set.add(am2);set.add(new Animal(12));set.add(new Animal(12));System.out.println("Animal对象的数量:"+set.size());}}class Animal{int age;public Animal(int age){this.age=age;}public int getAge(){return age;}@Overridepublic int hashCode() {return this.age*31+this.age;}@Overridepublic boolean equals(Object obj) {// TODO Auto-generated method stubif(this.hashCode()==obj.hashCode()){return true;}return false;}}
这里输出的结果是: Animal对象的数量:1
阅读全文
0 0
- equals() 和 hashCode()
- hashcode()和equals()方法
- hashcode() 和 equals()方法
- 关于equals和hashCode
- 重写equals()和hashCode()
- 关于hashcode()和equals()
- hashcode和equals
- equals和hashCode
- equals 和 hashcode
- 关于equals() 和hashcode()
- 关于equals() 和hashcode()
- equals()和hashCode()
- equals() 和hashcode()详解
- hashCode()和equals()
- equals和 hashcode比较
- 浅谈equals和hashcode
- equals和hashCode方法
- hashCode() 和 equals() 理解
- spring 注解 简介
- Python在函数中使用*和**接收元组和列表
- [arc079f]Namori Grundy
- git仓库相关知识01-安装和基本命令
- 科研笔记
- hashcode和equals
- 自定义按钮实现水波纹效果
- C++ 模板详解(一)
- plsql创建oracle用户并授权
- 通过串口烧写龙芯1c固件到flash
- 应用层下基于异常行为的未知勒索软件检测
- C++ 多态的实现及原理——面试的FAQ
- 文盲的数据库指令优化心得:第二部分,指令变形和执行计划
- Mybatis学习——认识Mappper.xml配置文件