- 浏览: 257723 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
rdsgf:
也就是导出。。。如何把生成的图片导出到本地,有没有接口?
报表 charts4j -
rdsgf:
你好,请问生成的图片如何保存到本地?
报表 charts4j -
刘焕杰:
楼主,为啥放进去后,我下载的中文文件名还是乱码呢?
[jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题 -
814687491:
Ext Panel 动态 加载 html -
yxyysu:
下载之后使用了,没有解决上传时中文名字乱码问题,请博主指导。
[jspSmartUpload]------------>jspSmartUpload上传中文文件名 乱码问题
1.equals 的等价关系
2. 重新equals 的具体方法
3. 对应修改hashcode方法
具体的例子
2. 重新equals 的具体方法
3. 对应修改hashcode方法
具体的例子
/** * */ package com.study.effective; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * * @className :EqualsTest * @package : com.study.effective * @Description :effective Java 中关于equals的介绍 * @author:lgf * @date :2012 一月 18 11:27:04 * @version : 1.0 */ public class EqualsTest { private int hashCode; private String strValue; private boolean booleanValue; private long longValue; private int intValue; private double doubleValue; private float floatValue; private String [] arr; private EqualsTest objField; public EqualsTest(){ } public EqualsTest(String strValue,int intValue){ this.strValue = strValue; this.intValue = intValue; } /** * 重写equals方法 * 对称,传递,一致 */ @Override public boolean equals(Object obj) { //1. 判断是否是本身对象的引用 if (this == obj) { return true; } //2. 判断是否就是本身对象的类型 if(!(obj instanceof EqualsTest)){ return false; } //3. 把参数转换成正确的类型,前面已经进行判断过了,所以肯定可以判断成功 EqualsTest temp = (EqualsTest)obj; //4. 根据每个关键参数进行判断是否相等 // 就是你自己的判断依据 // return (this.strValue == temp.strValue)&& // (this.booleanValue == temp.booleanValue)&& // (this.intValue == temp.intValue) && // (Double.compare(this.doubleValue, temp.doubleValue) == 0)&& // (Float.compare(this.floatValue, temp.floatValue) == 0) && // (Arrays.equals(this.arr, temp.arr))&& // ((this.objField == temp.objField) || (this.objField != null && this.objField.equals(temp.objField))) //4-1 基本数据类型(除了 double 和 float) 直接用 == 进行判断 if (this.strValue != temp.strValue) { return false; } if (this.booleanValue != temp.booleanValue) { return false; } if (this.longValue != temp.longValue) { return false; } if (this.intValue != temp.intValue) { return false; } //4-2double 类型数据可以通过Double.compare 进行判断 相等就== 0 if (Double.compare(this.doubleValue, temp.doubleValue) != 0) { return false; } //4-3float 类型数据可以通过Float.compare 进行判断 相等就== 0 if (Float.compare(this.floatValue, temp.floatValue) != 0) { return false; } //4-4 数组可以通过这个进行判断 if (!Arrays.equals(this.arr, temp.arr)) { return false; } //4-5 如果是对象则可以通过这个进行判断 if(!((this.objField == temp.objField) || (this.objField != null && this.objField.equals(temp.objField)))){ return false; } return true; } /** * 重写equals方法同时也要重写hashCode * 每个对象的散列码 */ @Override public int hashCode() { int result = hashCode; if (result == 0) { result = 1; result = 31 * result + this.intValue; // byte,char, short, int 计算 (int)value result = 31 * result + (this.booleanValue ? 1 : 0); // boolean 计算 (value ? 1 : 0) result = 31 * result + (int)(this.longValue^(this.longValue>>>32));// long 计算 (value ^ (value>>>32)) result = 31 * result + Float.floatToIntBits(this.floatValue); // float 计算 (value ? 1 : 0) result = 31 * result + (int)(Double.doubleToLongBits(this.doubleValue)^(Double.doubleToLongBits(this.doubleValue)>>>32));// 先转换成long 在转成int result = 31 * result + Arrays.hashCode(this.arr); // 数组hashcode获得 result = 31 * result + (this.objField == null ? 0 : this.objField.hashCode());// 对象的hashcode获得 hashCode = result; } return hashCode; } public static void main(String[] args) { EqualsTest e3 = new EqualsTest("e",0); EqualsTest e4 = new EqualsTest("e",0); //Map 把每个项相关的散列码缓存起来,如果散列码不匹配,就不必检查对象的相同性 Map<EqualsTest, String> map = new HashMap<EqualsTest, String>(); map.put(e3, "e3"); // 保存数据的时候就计算hashCode了 System.out.println(map.get(e4)); } }
- EqualsTest.zip (1.7 KB)
- 下载次数: 0
发表评论
-
List 遍历 ConcurrentModificationException
2013-07-05 17:39 1112有如下代码片段: public static void m ... -
foreach的原理
2013-07-05 14:49 870... -
java.util.Properties 简单用法
2013-04-25 10:05 16341. 认识properties文件 1、properties文 ... -
while 和 for 不完全相同
2013-03-07 11:05 8131. for和while的语法如下: for(initi ... -
(a + (a++)) 与 ((a++) + a)
2013-03-04 09:46 898直接上代码: public static void mai ... -
java 发送邮件错误收集
2012-10-31 19:00 8431. 报错: Exception in thread &qu ... -
Add Deployment java.lang.NullPointerException
2012-08-22 17:28 33811. 在用Myeclipse部署项目时候突然报错: 无法 ... -
Undefined exploded archive location
2012-08-22 17:14 9881. 用Myeclipse部署web系统wlms时候报如下错误 ... -
java @override 报错处理
2012-07-25 16:17 857有时候在自己电脑上编译通过的java代码,在别人那里却编译不通 ... -
java 环境变量配置
2012-07-25 10:01 968windows xp下配置JDK环境变量: 1.安 ... -
java 源码解析--LinkedList
2012-03-13 14:20 1191LinkedList 1.看源码前应该知道的知识点 ... -
java 源码解析--ArrayList
2012-03-13 09:51 1339ArrayList 1.看源码前应该知道的知识点 / ... -
java 三大特性--封装、继承和多态理解
2012-03-12 15:21 3802封装 /** * 所谓封装,就是将对象具有的成员变量和 ... -
java 关键字 clone
2012-02-24 17:24 8691. 最简单的clone例子 /** * */ ... -
java 基础之(接口)
2011-11-28 15:20 941“interface”(接口)关 ... -
java 基础之(抽象类)
2011-11-28 15:15 963抽象方法 :它属于一种不完整的方法, 只含有一个声明,没有方法 ... -
位移运算符
2011-11-04 11:46 974package com.lgf.operation; / ... -
java 关键字 final
2011-10-25 09:52 9031. final 数据 package com.lgf.k ... -
java 基础语法
2011-10-22 09:26 1116Java 基础语法 1.标识符 ... -
报表 charts4j
2011-10-18 09:32 32231. 简介 charts4j is a Java chart ...
相关推荐
Java重写equals同时需要重写hashCode的代码说明,以及如何重写hashCode方法,此代码演示按照effective java书籍说明的重写思路。代码中演示了使用集合存储对象,并且对象作为key,需重写equals和hashCode.
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
"Java中equals、hashcode和==的区别" Java 中 equals、hashcode 和==的区别是 Java 编程语言中一个经常遇到的问题。这三个概念都是用来比较对象的,但是它们之间存在着本质的区别。 首先,==号是Java中的一个...
在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...
"Java重写equals及hashcode方法流程解析" Java中的equals和hashCode方法是两个非常重要的方法,它们都是Object类中的方法。在实际开发中,正确地重写这两个方法对于确保程序的正确性和性能至关重要。下面,我们将...
总的来说,理解并正确地重写 `equals()` 和 `hashCode()` 方法是Java编程中的基础技能,它有助于确保对象的比较和集合操作的正确性。在开发过程中,要时刻注意这两个方法的正确实现,以提高代码质量和可维护性。
深入解析Java对象的equals()和hashCode()的使用 在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个。在多数情况下,这两个函数是不用考虑的,直接使用它们...
在Java编程语言中,`equals()`和`hashCode()`方法是对象的基本组成部分,它们主要用于对象的比较和存储。这两个方法在`java.lang.Object`类中定义,因此所有的Java类都默认继承了这两个方法。然而,根据具体的应用...
本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...
Java容器集合(equals和hashCode+基础数据结构+ArrayList+Vector和LinkedList) Java容器集合是Java中的一种基础数据结构,用于存储和管理数据。其中,equals和hashCode方法是Java容器集合中两个非常重要的方法,...
Java 中的每个对象都有 hashCode() 和 equals() 方法,这两个方法的正确实现对于 Java 开发人员来说是非常重要的。本文将详细介绍 hashCode() 和 equals() 的本质区别和联系,并探讨在创建 Java 类时如何定义这些...
Java 中的 hashCode 和 equals 方法详解 本文详细介绍了 Java 中的 hashCode 和 equals 方法,探讨了这两个方法的作用、实现机制和使用场景。通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java ...
在Java编程语言中,`equals()`方法和`hashCode()`方法是两个非常重要的概念,它们主要用于对象的比较和哈希表的高效运作。本解析将深入探讨这两个方法的用途、实现原理以及它们之间的关联。 首先,`equals()`方法是...
在Java编程语言中,`hashCode()`和`equals()`方法是对象身份验证的关键组成部分,它们主要用于对象的比较和哈希表(如HashMap、HashSet等)的操作。理解这两个方法的工作原理对于编写高效和可靠的代码至关重要。 ...
在Java编程语言中,`equals()`, `hashCode()` 和 `toString()` 是三个非常重要的方法,它们主要用于对象的比较、哈希存储以及打印对象信息。这三个方法是Java对象的基础特性,对于理解和开发高质量的Java程序至关...
在Java编程语言中,`equals()`和`hashCode()`方法是两个至关重要的概念,它们与对象的比较和哈希表操作紧密相关。理解这两个方法的工作原理及其契约是成为一名熟练的Java开发者所必需的。 首先,`equals()`方法是...
之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode。 为什么选择hashCode方法的原因是由于JVM的机制。当JVM创建对象时,它会将对象丢到一个Hash表中去,这样的...
在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及它们之间的关系...