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. Android学习系列(36)--App调试内存泄露之Context篇(上)

    Context作为最基本的上下文,承载着Activity,Service等最基本组件.当有对象引用到Activity,并不能被回收释放,必将造成大范围的对象无法被回收释放,进而造成内存泄漏. 下面针对 ...

  2. 2016.9.14 JavaScript入门之七面向对象和函数

    1.JavaScript中的变量,可以是对象,具有相应的属性: 2.我们也能够使用构造函数创建对象.构造函数的函数给出了一个大写的名称,以使它清楚地表明它是一个构造函数. 在构造函数中,这个变量是指由 ...

  3. shell-bash学习01基础、打印、环境变量

    基础 终端提示符: username@hostname$; $: 一般用户 #:root用户 运行脚本 Bash执行: * bash script.sh; 直接运行: 脚本开头添加shebang起始: ...

  4. mongodb学习04 操作详解(2)

    查找文档 筛选查找 db.collection.find(); 返回一个集合中文档的子集,子集的 范围从 0 个文档到整个集合; db.collection.findOne(); 返回筛选的一个文档; ...

  5. java中 ==与equals 有什么区别?

    1.==既可以比较基本类型变量,又可比较引用类型变量,而equals只能比较引用类型变量: 2.equals方法支持重写,如果未重写equals方法,则比较引用变量时与==都是比较变量所指向的对象地址 ...

  6. C# 词法分析器(四)构造 NFA

    系列导航 (一)词法分析介绍 (二)输入缓冲和代码定位 (三)正则表达式 (四)构造 NFA (五)转换 DFA (六)构造词法分析器 (七)总结 有了上一节中得到的正则表达式,那么就可以用来构造 N ...

  7. 一个基于RBAC0的通用权限设计清单

    注:RBAC0与RBAC1不同在于权限继承.关于RBAC1的权限设计,敬请关注作者后续CSDN博客.1,用户表 保存系统用户信息,如张三.李四,字段可以有id.name.fullname.email. ...

  8. C#生成PDF总结

    (一)C#生成PDF总结 (1)iTextSharp控件对iTextSharp研究还可以表格.文字.各种GDI对象,图片,水印,文字旋转(2)aspose的控件(3)PDF Library这个类库(只 ...

  9. OA

    OA(政府) http://zw.wuzhitong.com/oa_wuzhitong/index.asp http://www.wuzhitong.com/Information_ZW.html O ...

  10. Javascript 利用a标签自动解析URL分析网址实例

    /* * @function: 通过a标签解析url标签 * @param:url url参数是字符串,解析的目标 通过IE6-9 chrome Firefox测试 * */ function par ...