java 关于hashcode和equals的测试
package thinkingInJava; import java.util.HashMap; /*
* 测试在向以hashcode为基础的集合(HashSet , HashMap , HashTable )中操作对象时,
* 该对象的equals方法和hashcode方法的影响
*
*/
class MapItem2 {
private String title ;
public MapItem2(String title ){
this.title = title ;
}
public void setTitle(String title ){
this.title = title ;
}
@Override
public int hashCode() {
return title.hashCode() ;
}
}
public class TestEqualsAndHashcode { public static void main(String[] args) {
// 向HashMap中添加对象
/*
* 1. 计算对象的hashcode
* 2. 根据计算的hashcode将对象存储进对应的数组中
* 3. 如果两个对象计算的hashcode相同,
* 再通过equals方法判断两个对象是不是相等。
* 如果equals方法返回true,这将已有对象覆盖掉。
* 否则执行下一步操作
* 4. 则将这两个对象存储在以该hashcode对应数组元素为头的链表上
*
*/
HashMap hm = new HashMap() ;
MapItem2 mi = new MapItem2("") ;
//System.out.println("HashMap object hashcode : " + mi.hashCode());
hm.put(hm, "xx") ; // 使用HashMap的get方法从HashMap中获取值
/*
* 1. 根据传递进来的对象计算其hash值,找到相应数组位置。
* 2. 通过equals方法判断数组位置上的值是否与该值相等。
* 3. 相等返回值,否则返回null。
*/
/*
* 测试: 使用对象的title属性的hashcode作为hashcode的返回值,
* 然后将对象put到Map中,然后将title改变,再从Map中取值
*/
HashMap hm2 = new HashMap() ;
MapItem2 mi2 = new MapItem2("xxx") ;
hm2.put(mi2 , "xxx") ;
mi2.setTitle("yyyy") ;// 重新设置title值后就无法再获取xxx值了,因为在get时计算的hash值变了
System.out.println(hm2.get(mi2)) ;
}
}
java 关于hashcode和equals的测试的更多相关文章
- java中hashcode和equals的区别和联系
HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...
- java中hashcode()和equals()的详解
今天下午研究了半天hashcode()和equals()方法,终于有了一点点的明白,写下来与大家分享(zhaoxudong 2008.10.23晚21.36). 1. 首先equals()和hashc ...
- 【Java】hashcode()和equals()
大家知道,在集合中判断集合中的两个元素是否相同,依赖的是hashcode()和equals()两个方法. > 一个简单的实验 public class Teacher { private Int ...
- Java中hashcode,equals和==
hashcode方法返回该对象的哈希码值. hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过has ...
- java 中hashcode和equals 总结
一.概述 在Java中hashCode的实现总是伴随着equals,他们是紧密配合的,你要是自己设计了其中一个,就要设计另外一个.当然在多数情况下,这两个方法是不用我们考虑的,直 ...
- java的HashCode和equals
什么时候用到hashcode,什么时候用到equals? 首先java为每个对象都生成有默认的hashcode,这个java core里说是java对象的内存地址,但是equals方法里比较的也是对象 ...
- 【JAVA】hashcode() & equals()
平时使用map时都是用JAVA原生的类型,所以很少关注到hashcode()和equals()的方法的内部实现.近期实现一个小工具,涉及到自己写的类的查找比对,又再次重温了相关的知识. 上简单示例代码 ...
- java中 hashCode() 和 equals()
1. 值类型是存储在内存中的栈,而引用类型的变量在栈中仅仅是存储引用类型变量的地址来自堆,而其本身则存储在栈中. 2. ==操作比较的是两个变量的值是否相等, 3. 对于引用型变量表示的是两个变量在堆 ...
- 深入探究Java中hashCode()和equals()的关系
目录 一.基础:hashCode() 和 equals() 简介 equals() hashCode() 二. 漫谈:初识 hashCode() 与 equals() 之间的关系 三. 解密:深入理解 ...
随机推荐
- AOP动态代理解析4-jdk代理的实现
JDKProxy的使用关键是创建自定义的InvocationHandler,而InvocationHandler中包含了需要覆盖的函数getProxy,而当前的方法正是完成了这个操作.在此确认一下JD ...
- SpringBoot的简单应用以及部署
1. 项目目录结构
- javaScript入门第一天
JavaScript提供七种不同的data types(数据类型),它们是undefined(未定义), null(空), boolean(布尔型), string(字符串), symbol(符号), ...
- ccc 单点触控
cc.Class({ extends: cc.Component, properties: { }, // use this for initialization onLoad: function ( ...
- python 代码片段22
#coding=utf-8 class AddressBookEntry(object): version=0.1 def __init__(self, name,phone): self.name ...
- 笔记本做wifi热点
你可以开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路由器,实现共享上网.点开始 所有程序 命令提示符右键管理员身份运行命令提示符 运行命令:ne ...
- BZOJ1082: [SCOI2005]栅栏 题解
题目大意: 有一些木材,可以没有浪费地将一根木材分成几块木板(比如长度为10的木板可以切成长度为8和2的两块木板).现在你希望得到一些长度的木板,问通过分割木材最多能得到几块想要的木板. 思路: 首先 ...
- 51Nod 1256 乘法逆元 Label:exgcd
1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < K < N且K ...
- android实现两个页面跳转
1.实现两个界面之间转换 在安卓当中,最常见的就是按下按钮之后跳转到第二个界面. 关键代码很简单: 这是以bn2按钮为例,当前Activity为MainActivity,跳转到Registration ...
- U-Boot编译过程解析
解压u-boot-2010.03.tar.bz2就可以得到全部U-Boot源程序.在顶层目录下有29个子目录,分别存放和管理不同的源程序.这些目录中所要存放的文件有其规则,可以分为3类. ● 与处理器 ...