为什么要覆盖Java中的equals和hashcode
2015-11-18 16:42
363 查看
众所周知,覆盖equals方法必须覆盖hashcode方法。那么,为什么要覆盖equals和hashcode方法呢?
1.equals
在list列表的list.contains()方法中,判断是否包含用的是equals方法。所以,针对自定义对象应该重写equals。
2.hashcode
在hashMap的containsKey()方法中,判断是否包含键(加入键是自定义对象)时,索引数组(hashmap由数组和链表组成--不懂的请自补)用到了对象的hashcode。所以,针对自定义对象也应该重写hashcode。
综上:
如果两个对象相等(使用equals()方法),那么必须拥有相同的哈希码(使用hashCode()方法)。
即使两个对象有相同的哈希值(hash code),他们不一定相等.意思就是: 多个不同的对象,可以返回同一个hash值。
参考:
http://book.51cto.com/art/201202/317533.htm
/article/2584879.html
1.equals
在list列表的list.contains()方法中,判断是否包含用的是equals方法。所以,针对自定义对象应该重写equals。
2.hashcode
在hashMap的containsKey()方法中,判断是否包含键(加入键是自定义对象)时,索引数组(hashmap由数组和链表组成--不懂的请自补)用到了对象的hashcode。所以,针对自定义对象也应该重写hashcode。
综上:
如果两个对象相等(使用equals()方法),那么必须拥有相同的哈希码(使用hashCode()方法)。
即使两个对象有相同的哈希值(hash code),他们不一定相等.意思就是: 多个不同的对象,可以返回同一个hash值。
参考:
http://book.51cto.com/art/201202/317533.htm
/article/2584879.html
相关文章推荐
- eclipse与myeclipse恢复已删除的文件和代码
- javafx form
- MyEclipse 10 创建Maven项目
- Java中的static关键字
- java的File.separator
- Java JFrame简单程序(SimpleJFrame.java)
- springMVC下,MyBatis实现复杂查询
- Java程序执行原理 字节码
- Lombok 安装、入门 - 消除冗长的 java 代码
- exception is java.lang.NoSuchFieldError: INSTANCE
- Eclipse中配置weka
- 结合Netty与Protobuf小栗子
- 深入Java系列——面向对象之(一)——抽象
- java 快排练习
- 【java基础】java中的char类型
- Thread.java start方法和run方法的区别
- 【java基础】Java中Unicode、编码的理解
- java 生产者消费者
- 《深入理解Java虚拟机》笔记一
- eclipse 配置黑色主题