1、Hash  的属性,

1)bucket 和 list

2、java.lang.object 的 hashcode 和 equal 通过内存地址比较

3、为什么要重写hashcode 和 equals,

1) 实现hashset不可重复的特性(http://www.cnblogs.com/happyPawpaw/p/3744971.html)

2)Hashmap

4、Hashmap的键值如果是类

5、Hashmap的put 和 get 方法

https://blog.csdn.net/lan12334321234/article/details/70048493

(https://blog.csdn.net/VIP_WangSai/article/details/77505517)

6、先判断hashcode, 再判断equals

为什么要这种判断顺序呢,因为要实现的是hash的特性,bucket由hashcode 决定;

hashcode  true, equal 不一定 true

equals true, hashcode 一定true

==,hashcde, equals

public class Student{
private int id;
private String name; public Student(int id, String name){
this.id = id;
this.name = name;
}
}

  

main

public static void main(String args[]) { 

        Student student01 = new Student(1,"lee");
Student student02 = new Student(1,"lee"); System.out.print("student01 == student02 :");
if(student01 == student02){
System.out.println("true.");
}else{
System.out.println("false.");
} System.out.print("student01.hashCode() == student02.hashCode() :");
if(student01.hashCode() == student02.hashCode()){
System.out.println("true.");
}else{
System.out.println("false.");
} System.out.print("student01.equals(student02) :");
if(student01.equals(student02)){
System.out.println("true.");
}else{
System.out.println("false.");
} Set<Object> set = new HashSet<Object>();
set.add(student01);
set.add(student02);
System.out.println("HashSet 长度:" + set.size());
}

输出

默认,继承Object
student01 == student02 :false.
student01.hashCode() == student02.hashCode() :false.
student01.equals(student02) :false.
HashSet 长度:2  

修改student 的 hashcode类如下

public class StudentModifyHashCode{

	private int id;
private String name; public StudentModifyHashCode(int id, String name){
this.id = id;
this.name = name;
} @Override
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime*result+this.id;
return result;
}
}

  

输出,可以看到这次hashcode 一样的

修改hashcode
student01 == student02 :false.
student01.hashCode() == student02.hashCode() :true.
student01.equals(student02) :false.
HashSet 长度:2

  

同时修改student的hashcode 和 equals 方法如下

public class StudentModifyEqualAndHash{

    private int id;
private String name; public StudentModifyEqualAndHash(int id, String name){
this.id = id;
this.name = name;
} public int getId() {
return id;
} public String getName() {
return name;
} @Override
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime*result+this.id;
return result;
} @Override
public boolean equals(Object obj){
if(this == obj)
return true;
if(obj == null)
return false;
if(getClass() != obj.getClass())
return false;
StudentModifyEqualAndHash other = (StudentModifyEqualAndHash)obj;
if(this.id != other.getId() ){
return false;
}
for(int i=0;i<this.name.length();i++){
if(this.name.charAt(i) != (((StudentModifyEqualAndHash)obj).getName().charAt(i))){
return false;
}
}
return true;
}
}

  

输出,可以看到hashcode 和 equals 都一样

修改hashcode和equals
student01 == student02 :false.
student01.hashCode() == student02.hashCode() :true.
student01.equals(student02) :true.
HashSet 长度:1

https://blog.csdn.net/lixiaoxiong55/article/details/93376852

hashCode作用: https://blog.csdn.net/qq_38977097/article/details/80834525

 

==,hashcde, equals(一)的更多相关文章

  1. equals变量在前面或者在后面有什么区别吗?这是一个坑点

    我就不废话那么多,直接上代码: package sf.com.mainTest; public class Test { public static void main(String[] args) ...

  2. How to implement equals() and hashCode() methods in Java[reproduced]

    Part I:equals() (javadoc) must define an equivalence relation (it must be reflexive, symmetric, and ...

  3. 【特种兵系列】String中的==和equals()

    1. 小样示例 public static void main(String[] args) { String a = "a" + "b" + 123; Str ...

  4. (转)浅谈Java中的equals和==

    原文地址: http://www.cnblogs.com/dolphin0520/p/3592500.html 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new S ...

  5. 浅谈Java中的equals和==(转)

    浅谈Java中的equals和== 在初学Java时,可能会经常碰到下面的代码: 1 String str1 = new String("hello"); 2 String str ...

  6. List<T>Find方法,FindAll方法,Contains方法,Equals方法

    假如传入的T是一个类, List<MessageInfos> MessageInfos = new List<MessageInfos>(); MessageInfos= Me ...

  7. 让代码重构渐行渐远系列(3)——string.Equals取代直接比较与非比较

    重构背景及原因 最近由于项目组的人员在不断扩充,导致项目中代码风格各异,大有百花齐放甚至怒放之势.考虑到团队的生存与发展,经过众人多次舌战之后,最终决定项目组根据业务分成几个小分队,以加强团队管理与提 ...

  8. [java] 更好的书写equals方法-汇率换算器的实现(4)

    [java] 更好的书写equals方法-汇率换算器的实现(4) // */ // ]]>   [java] 更好的书写equals方法-汇率换算器的实现(4) Table of Content ...

  9. Equals和ReferenceEquals

    稍微分析下一下两个方法的区别: public static bool Equals(object objA, object objB); public static bool ReferenceEqu ...

随机推荐

  1. eCharts使用图表简单示例

    https://blog.csdn.net/hlbt0112/article/details/48862427 1. eCharts官网 http://echarts.baidu.com/index. ...

  2. 解决samtools报错:[main_samview] region "chr2:20,100,000-20,200,000" specifies an unknown reference name. Continue anyway.

    根据Samtool 的manual文档介绍,如果想搜索bam文件的某段区域,需要用到以下命令: samtools view aln.sorted.bam chr2:20,100,000-20,200, ...

  3. 斯坦福大学公开课机器学习: neural networks learning - autonomous driving example(通过神经网络实现自动驾驶实例)

    使用神经网络来实现自动驾驶,也就是说使汽车通过学习来自己驾驶. 下图是通过神经网络学习实现自动驾驶的图例讲解: 左下角是汽车所看到的前方的路况图像.左上图,可以看到一条水平的菜单栏(数字4所指示方向) ...

  4. Day17--Python--面向对象--成员

    成员 class Person: def __init__(self, name, num, gender,birthday): # 成员变量(实例变量) self.name = name self. ...

  5. Jquery Mobile事件

    Jquery Mobile事件参考手册 on()方法用于添加事件处理程序 1.Touch类事件 在用户触摸屏幕时触发 1.1 tap事件 用户敲击某个元素时发生 $("p").on ...

  6. java练习:质数,匿名内部类创建接口,抽象类派生子类,画圆,字节截取字符串,数字变钱币,五子棋,梭哈

    java学习-质数的孤独 正在看质数的孤独,,,于是写了一个练习代码,输出1-100之间的质数 代码比较烂.待完善吧. 这里用到了continue和break,continue指结束当前轮次循环,跳入 ...

  7. Linux设备树(一 概述)

    一 概述 设备树(Device tree)是一套用来描述硬件属相的规则.ARM Linux采用设备树机制源于2011年3月份Linux创始人Linus Torvalds发的一封邮件,在这封邮件中他提倡 ...

  8. jmeter打开图形化界面时指定代理

    \apache-jmeter-4.0\bin>jmeter -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888 如果不想在每个请求里面指定代理的话可 ...

  9. python机器学习-sklearn挖掘乳腺癌细胞(四)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  10. 浅析基于ARM的Linux下的系统调用的实现

    在Linux下系统调用是用软中断实现的,下面以一个简单的open例子简要分析一下应用层的open是如何调用到内核中的sys_open的. t8.c 1: #include <stdio.h> ...