首页 > 编程语言 >数据结构 玩转数据结构 14-3 java中的hashCode方法

数据结构 玩转数据结构 14-3 java中的hashCode方法

时间:2023-12-03 11:45:45浏览次数:45  
标签:java 14 System hashCode 哈希 println hash 数据结构 out

0    课程地址

https://coding.imooc.com/lesson/207.html#mid=15346

 

1    重点关注

1.1    重写hashCode和equals方法

参见3.1

 


 

2    课程内容

2.1    不同的对象的默认hashCode方法

Integer  相同数字的一样

Double  相同数字的一样

String    相同字符串的一样

对象      比较的是引用的地址, new两次相同的对象,地址不同,所以哈希值不同

对象      重写,重写对象的hash方法后,哈希值相同

详见3.1

 

 

 

 

 

 

 

3    Coding

3.1    重写hashCode和equals方法

  • 测试类:
package com.example.jiayou.ceshi;

public class Test2 {

    public static void main(String[] args) {

        /**
         * 1整数哈希值   值固定
         */
        int a = 6;
        System.out.println(((Integer)a).hashCode());

        int b = -6;
        System.out.println(Integer.hashCode(b));

        /**
         * 2小数哈希值   值固定
         */
        System.out.println(Double.hashCode(3.2));

        /**
         * 3字符串哈希值  值固定
         */
        System.out.println("ccc".hashCode());


        Man man = new Man("110",15);
        Man man2 = new Man("110",15);
        /**
         * 4对象哈希值重写 值固定
         */
        System.out.println(man.hashCode());
        System.out.println(man2.hashCode());

        /**
         * 5对象哈希值不重写 值不固定
         */
        System.out.println(man.hashCode());
        System.out.println(man2.hashCode());

    }

}

 

  • 主类:
package com.example.jiayou.ceshi;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class Man {

    private String idNo;
    private int age;

    //比较hashCode,无视大小写
    public int hashCode(){
        int B = 31;//随便定义,类比前一节小写字母
        int hash = 0;
        hash = hash*B+idNo.toLowerCase().hashCode();
        hash = hash*B+age;
        return hash;
    }

    public boolean equals(Object obj){
        //1 对象地址引用一样,一定是同一对象
        if(this==obj){
            return true;
        }

        //2 不同:通用为null
        if(null==obj){
            return false;
        }

        //3 不同:通用继承情况
        if(this.getClass()!=obj.getClass()){
            return false;
        }

        Man man = (Man)obj;
        //4 相同:属性完全一致
        if(man.getAge()==this.getAge()&&
                man.getIdNo().hashCode()==this.getIdNo().hashCode()){
            return true;
        }
        return false;

    }

}

 

标签:java,14,System,hashCode,哈希,println,hash,数据结构,out
From: https://www.cnblogs.com/1446358788-qq/p/17872747.html

相关文章

  • 前端学习笔记202310学习笔记第一百壹拾五天-ES5模块化开发技巧之14
    ......
  • Linux第14章学习笔记
    第十四章学习笔记mysql简介MySQL是一个开源数据库管理系统,由服务器和客户机组成。在将客户机连接到服务器后,用户可向服务器输入SQL命令,以便创建数据库,删除数据库,存储、组织和检索数据库中的数据。MySQL有广泛的应用。安装MySQL在Ubuntu中,使用命令sudoaptinstallmysql-serv......
  • 2023-2024-1 20231403 《计算机基础与程序设计》第十周学习总结
    作业信息这个作业属于哪个课程<班级的链接>(如2022-2023-1-计算机基础与程序设计)这个作业要求在哪里2023-2024-1计算机基础与程序设计第十周作业)这个作业的目标自学教材《计算机科学概论》第12,13,14章《C语言程序设计》第9章作业正文https://www.cnblogs.com/l......
  • 多媒体应用设计师 第14章 多媒体应用的策划与设计
    口诀【应开步确明准集】(多媒体应用系统开发的主要步骤:确定开发对象;明确开发方法;准备多媒体数据;集成一个多媒体应用系统。)【瀑优控制和验证】(瀑布式生命周期:优点:便于控制开发的复杂性和验证程序的正确性)【瀑缺规格和细节】【费力一充完交互】(瀑布式生命周期:缺点:太强调规......
  • java获取multipartfile的编码
    Java获取MultipartFile的编码在Java开发中,我们经常需要处理文件上传功能。Spring框架提供了MultipartFile接口来处理文件上传,它是对文件上传的封装,提供了一系列的方法来处理文件的内容、类型、大小等。在某些情况下,我们可能需要获取MultipartFile的编码信息,比如判断上传文件的编......
  • java获取linux目录下的文件
    Java获取Linux目录下的文件在Java中,我们可以使用File类来操作文件和目录。在Linux系统中,我们可以使用ls命令来列出目录下的文件,然后通过Java代码来获取这些文件的信息。列出目录下的文件我们可以使用ProcessBuilder来执行Linux命令,并通过Java代码获取命令的输出结果。下面是一个......
  • java获取7天后的时间戳
    Java获取7天后的时间戳概述在Java开发中,经常会遇到需要获取指定日期之后或之前的时间戳的需求。本文将教会刚入行的小白如何使用Java编写代码获取7天后的时间戳。流程以下是获取7天后时间戳的流程:步骤描述1获取当前日期时间2将当前日期时间加上7天3将加上7......
  • java会将url自动转换
    Java如何自动转换URL简介在开发中,我们经常会遇到需要将URL字符串转换为Java的URL对象的场景。幸运的是,Java提供了一种自动转换URL的机制,使得我们可以方便地处理URL相关的操作。本文将介绍Java中URL自动转换的流程以及具体的实现步骤。URL自动转换流程URL自动转换的过程可以分为......
  • java后缀名file
    Java后缀名文件Java是一种高级编程语言,经常用于开发各种应用程序。在Java编程中,我们经常会遇到以.java为后缀名的文件。这篇文章将为您介绍Java后缀名文件的相关知识,并提供代码示例来帮助您更好地理解。Java后缀名文件的含义在Java中,后缀名为.java的文件是Java源代码文件的标识......
  • java后端实现前端弹窗
    Java后端实现前端弹窗教程简介在这篇文章中,我将教你如何使用Java后端实现前端弹窗。我们将使用SpringBoot框架来搭建后端服务,并通过前端发送请求来触发弹窗的显示。以下是整个实现过程的流程图:erDiagram程序员-->后端:创建后端服务后端-->前端:提供API前......