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的测试的更多相关文章

  1. java中hashcode和equals的区别和联系

    HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...

  2. java中hashcode()和equals()的详解

    今天下午研究了半天hashcode()和equals()方法,终于有了一点点的明白,写下来与大家分享(zhaoxudong 2008.10.23晚21.36). 1. 首先equals()和hashc ...

  3. 【Java】hashcode()和equals()

    大家知道,在集合中判断集合中的两个元素是否相同,依赖的是hashcode()和equals()两个方法. > 一个简单的实验 public class Teacher { private Int ...

  4. Java中hashcode,equals和==

    hashcode方法返回该对象的哈希码值. hashCode()方法可以用来来提高Map里面的搜索效率的,Map会根据不同的hashCode()来放在不同的位置,Map在搜索一个对象的时候先通过has ...

  5. java 中hashcode和equals 总结

    一.概述            在Java中hashCode的实现总是伴随着equals,他们是紧密配合的,你要是自己设计了其中一个,就要设计另外一个.当然在多数情况下,这两个方法是不用我们考虑的,直 ...

  6. java的HashCode和equals

    什么时候用到hashcode,什么时候用到equals? 首先java为每个对象都生成有默认的hashcode,这个java core里说是java对象的内存地址,但是equals方法里比较的也是对象 ...

  7. 【JAVA】hashcode() & equals()

    平时使用map时都是用JAVA原生的类型,所以很少关注到hashcode()和equals()的方法的内部实现.近期实现一个小工具,涉及到自己写的类的查找比对,又再次重温了相关的知识. 上简单示例代码 ...

  8. java中 hashCode() 和 equals()

    1. 值类型是存储在内存中的栈,而引用类型的变量在栈中仅仅是存储引用类型变量的地址来自堆,而其本身则存储在栈中. 2. ==操作比较的是两个变量的值是否相等, 3. 对于引用型变量表示的是两个变量在堆 ...

  9. 深入探究Java中hashCode()和equals()的关系

    目录 一.基础:hashCode() 和 equals() 简介 equals() hashCode() 二. 漫谈:初识 hashCode() 与 equals() 之间的关系 三. 解密:深入理解 ...

随机推荐

  1. Linux将文件拷到u盘

    1:终端中获取root后,使用fdisk -l来查看位置 2:挂载u盘:mount /路径 /mnt cd /mnt可进入u盘,ls可查看文件 3:复制:cp /(文件路径) /mnt 4:退出u盘: ...

  2. PHP学习之常量

    1.常量是一个简单值的标识符,该值在脚本中不能改变: 2.一个常量由英文字母,下划线,和数字组成,但数字不能作为首字母出现:(常量名中不需要加$修饰符) 3.常量在整个脚本中都可以使用: 4.设置PH ...

  3. node.js整理 01代码的组织和部署

    模块 require(函数) 用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象. 模块名可使用相对路径(以./开头),或者是绝对路径(以/或C:之类的盘符开头:注意单个模块名默 ...

  4. ember.js:使用笔记2-数据删除与存储

    在模版中写好响应操作触发的action之后,可以在controller:actions中设置了,需要注意的是对数据的操作一般都是对单个object进行操作,所以先要使用笔记1中的方法使用ObjectC ...

  5. SSH建立连接的过程

    1.     服务器建立公钥档: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host* 的档案,若刚刚安装完ssh软件时,由于没有这些公钥档案,通过/etc/init. ...

  6. jQuery入门第二天

    3种选择器:元素选择器:$("button").class选择器:$(".btn").id选择器:$("#target1"). <sc ...

  7. HDU4307 Matrix(最小割)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4307 Description Let A be a 1*N matrix, and each ...

  8. .net接口开发远程调试

    第一步: 找到你的C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Remote Debugger\x64\msvsmon ...

  9. uva 107 - The Cat in the Hat

     The Cat in the Hat  Background (An homage to Theodore Seuss Geisel) The Cat in the Hat is a nasty c ...

  10. uva 1339

    Ancient Roman empire had a strong government system with various departments, including a secret ser ...