- 浏览: 306132 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- linux (31)
- java (144)
- mysql (52)
- html (19)
- oracle (8)
- sql (12)
- 无题 (5)
- js (16)
- android (4)
- tomcat (4)
- struts (2)
- spring (12)
- elcipse (2)
- shell (7)
- interview (2)
- redis (6)
- apache (2)
- maven (10)
- mq (6)
- kengen (0)
- windows (3)
- css (1)
- nginx (2)
- google (1)
- zk (1)
- ibm (1)
- git (1)
- mvn (1)
- jms (1)
- uml (1)
最新评论
http://www.cnblogs.com/thinkleesion/p/4018820.html Google首席Java架构师Joshua Bloch在他的著作《Effective Java》中提出了一种简单通用的hashCode算法 1. 初始化一个整形变量,为此变量赋予一个非零的常数值,比如int result = 17; 2. 选取equals方法中用于比较的所有域,然后针对每个域的属性进行计算: (1) 如果是boolean值,则计算f ? 1:0 (2) 如果是byte\char\short\int,则计算(int)f (3) 如果是long值,则计算(int)(f ^ (f >>> 32)) (4) 如果是float值,则计算Float.floatToIntBits(f) (5) 如果是double值,则计算Double.doubleToLongBits(f),然后返回的结果是long,再用规则(3)去处理long,得到int (6) 如果是对象应用,如果equals方法中采取递归调用的比较方式,那么hashCode中同样采取递归调用hashCode的方式。 否则需要为这个域计算一个范式,比如当这个域的值为null的时候,那么hashCode 值为0 (7) 如果是数组,那么需要为每个元素当做单独的域来处理。如果你使用的是1.5及以上版本的JDK,那么没必要自己去 重新遍历一遍数组,java.util.Arrays.hashCode方法包含了8种基本类型数组和引用数组的hashCode计算,算法同上, java.util.Arrays.hashCode(long[])的具体实现:
http://www.cnblogs.com/bluepoint2009/p/Java-equals-method.html 通常而言,正确地重写equals方法应该满足下列条件: 自反性:对任意x,x.equals(x)一定返回true。 对称性:对任意x和y,如果y.equals(x)返回true,则x.equals(y)也返回true。 传递性:对任意x,y,z,如果x.equals(y)返回true,y.equals(z)返回true,则x.equals(z)一定返回true。 一致性:对任意x和y,如果对象中用于等价比较的信息没有改变,那么无论调用x.equals(y)多少次,返回的结果应保持一致,要么一直是true,要么一直是false。 对任何不是null的x,x.equals(null)一定返回false。 特别注意: 重新equals()方法后,一定要重写hashCode()方法,否则会引起一些意想不到的错误。
发表评论
-
adfasdfsdf
2017-03-23 08:38 509package com.twsz.creative.elv ... -
经典技术书籍
2016-12-08 11:00 428这个列表包括了 100 多本经典技术书籍,涵盖:计算机系统 ... -
分割字符串
2016-11-18 18:57 509@Test public void test2() { ... -
BD音乐部分接口
2016-11-15 15:45 695歌曲ID 详细信息接口:http://tingapi.ti ... -
限速器
2016-09-30 16:28 497package test.date; import ... -
Maven SCOPE
2016-09-29 23:34 393在Maven的依赖管理中, ... -
Twitter snowFlake
2016-09-19 22:22 421package com.netty.test.netty4 ... -
Spring BOOT生成web项目
2016-08-29 17:46 810https://github.com/spring-pro ... -
获取IP地址
2016-08-29 17:31 586import java.net.Inet4Address; ... -
Java Performance Tuning Guide
2016-08-29 15:14 360http://java-performance.info/ ... -
Nexus
2016-08-26 00:51 4152、创建解压目录,并将apache-maven-3.0-b ... -
Chain
2016-08-25 12:25 363public static void main(Strin ... -
Spring Boot
2016-08-23 12:50 521package com; import org.sp ... -
JAVA Seriesization
2016-08-16 15:28 518http://www.th7.cn/Program/And ... -
字节码
2016-08-12 19:42 483http://www.blogjava.net/libin ... -
回调在JSMTemplate的位置
2016-08-11 21:55 329package test; public class ... -
原生activeMQ支持
2016-08-10 20:40 433http://www.cnblogs.com/xwdrea ... -
activeMQ
2016-08-09 13:06 397http://www.open-open.com/lib/ ... -
logback
2016-08-05 10:45 488logback logback.xml常用配置详解(二)& ... -
uml
2016-08-03 21:32 363UML建模语言7种图(以银行ATM系统为例) http: ...
相关推荐
以下是对`equals()` 和 `hashCode()` 方法的详细解释及其重写的重要性。 **1. equals() 方法** `equals()` 方法用于比较两个对象是否相等。默认情况下,`equals()` 检查两个对象是否是同一个对象(即内存地址是否...
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
重写equals()、hashcode()和compareTo()方法是非常重要的,它可以使我们的程序更加高效、可靠和灵活。在实际开发中,我们需要根据具体情况来决定是否需要重写这些方法,并遵守相关的规则,以避免出现意想不到的结果...
在实际开发中,我们经常需要重写equals和hashCode方法,以便于正确地比较和存储对象。下面是一个简单的示例代码: public class Student { private String name; private int age; private String QQ; @...
在 Java 编程语言中,Object 类是所有类的父类,但是在实际开发中,我们往往需要重写 Object 中的 equals 和 hashCode 方法,以便正确地比较对象的逻辑内容,而不是内存地址。下面我们将详细地解释为什么需要重写这...
当同时重写 `equals()` 和 `hashCode()` 时,需要注意的一点是,如果 `equals()` 返回true,那么两个对象的 `hashCode()` 必须相等。反之则不一定,因为不同的对象可能会产生相同的哈希码。这就是为什么在设计类时,...
总结来说,`equals()` 和 `hashCode()` 在实际开发中的重写是提高代码质量、确保对象比较和哈希表操作正确性的关键。开发者需要根据业务需求来定制这两个方法,确保它们遵循上述原则,并与业务逻辑保持一致。
下面是一个简单的示例代码,演示了如何重写 equals 和 hashCode 方法: ```java public class Person { @Override public boolean equals(Object obj) { System.out.println("判断 Person 的 equals"); return ...
在这个类中,很可能已经重写了`equals()`, `hashCode()` 和 `toString()` 方法,以便更好地处理对象的比较、哈希存储和输出信息。 为了实现`DBObject`类的正确行为,开发者可能考虑了以下几点: 1. 在`equals()`...
重写equals方法需要遵守通用约定,hashCode方法的实现需要保证equals相同的两个对象的hashCode结果一致。ArrayList、Vector和LinkedList是Java中三种常见的容器集合,每种集合都有其特点和应用场景。
"Java中equals、hashcode和==的区别" Java 中 equals、hashcode 和==的区别是 Java 编程语言中一个经常遇到的问题。这三个概念都是用来比较对象的,但是它们之间存在着本质的区别。 首先,==号是Java中的一个...
在Java编程语言中,"equals"方法是Object类的一个核心方法,用于...总的来说,重写equals和hashCode是Java编程中常见的需求,特别是在创建自定义数据类型时。理解其工作原理和最佳实践对于编写高质量的代码至关重要。
3、**为什么要重写equals()方法?** 默认情况下,`equals()`方法继承自`Object`类,比较的是对象的引用。在处理自定义类时,我们可能关心的是对象的属性是否相等,而不是它们的内存地址。因此,为了基于对象的内容...
第二种情况:对于采用哈希算法的集合,集合中对象必须重写 hashCode 方法,同时也要重写 equals 方法。这是因为哈希算法需要使用 hashCode 方法来计算对象的哈希值,而 equals 方法用于判断两个对象是否相等。 如何...
如果我们重写了`equals()`方法来基于`name`和`age`判断两个`Coder`对象是否相等,那么我们也应该重写`hashCode()`,使具有相同`name`和`age`的`Coder`对象产生相同的哈希码。通常,`hashCode()`的实现会结合所有参与...
equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java 的 Object 类中,equals 方法...
在Java编程语言中,`equals()`和`hashCode()`方法是对象的基本组成部分,它们主要用于对象的比较和存储。这两个方法在`java.lang.Object`类中定义,因此所有的Java类都默认继承了这两个方法。然而,根据具体的应用...
如果一个类重写了`equals()`却没有重写`hashCode()`,可能会导致违反JavaDoc的建议,即`equals()`和`hashCode()`必须保持一致。这意味着,如果两个对象`equals()`返回`true`,那么它们的`hashCode()`也必须相同。...
IntelliJ IDEA,作为一款强大的Java集成开发环境,提供了便捷的快捷键功能来帮助开发者快速重写`hashCode()`和`equals()`。 在IDEA中,如果你需要对一个类(比如`Student`类)重写这两个方法,可以遵循以下步骤: ...
如果我们只重写了 `equals()` 来比较姓名和年龄,而没有重写 `hashCode()`,那么即使两个 `Person` 实例具有相同的姓名和年龄,它们在哈希表中的位置也可能不同,导致不必要的比较和潜在的性能问题。 总结来说,...