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. flv文件格式解析!!!

    flv头 FLV header 总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag组成. Signature: FLV 文件的前3个字 ...

  2. CSS3_实现圆角效果box-shadow

    1.outline的直角与圆角 来给个div: <div class="use-outline"></div> 来再给个样式: .use-outline{ ...

  3. Swift3.0语言教程字符串与URL的数据转换与自由转换

    Swift3.0语言教程字符串与URL的数据转换与自由转换 Swift3.0语言教程字符串与URL的数据转换 Swift3.0语言教程字符串与URL的数据转换与自由转换,字符串中的字符永久保存除了可以 ...

  4. PHP 生成二维码

    利用PHP QRcode生成二维码: php QRcode 官网 http://phpqrcode.sourceforge.net/ 在官网下载 phpqrcode.php就ok啦: 然后,查看自己的 ...

  5. wpf,图片灰化处理

    private BitmapSource ToGray(BitmapSource source) { FormatConvertedBitmap re = new FormatConvertedBit ...

  6. Android自动化测试 - MonkeyRunner(三) 随手练习测试脚本

    #coding=utf-8 import os import time #import MonkeyRunner three module from com.android.monkeyrunner ...

  7. Oracle查询每天固定时间段的数据

    select * from GPS_LOG t where to_char(t.gps_time,'hh24:mm:ss')>='15:30:00'and to_char(t.gps_time, ...

  8. ccc 音乐播放

    cc.Class({ extends: cc.Component, properties: { musicPlayer: { default: null, type: cc.AudioSource } ...

  9. Shell 脚本

    近期在别人的工作基础上完善了几个shell自动安装脚本. 1. 循环远程访问机器并安装 #!/bin/bash IpPrefix=. User=root Pwd= SMNIP=52.1.123.79 ...

  10. Node.js -- Router模块中有一个param方法

    这段时间一直有在看Express框架的API,最近刚看到Router,以下是我认为需要注意的地方: Router模块中有一个param方法,刚开始看得有点模糊,官网大概是这么描述的: 1 Map lo ...