0
点赞
收藏
分享

微信扫一扫

个人博客搭建详细步骤

钟罗敏 2023-06-03 阅读 74

哈希值概述和特点

  • 哈希值概述

    哈希值是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值

    Object类中有一个方法可以获取对象的哈希值:

    • public int hashCode():返回对象的哈希值
  • 哈希值特点

    同一个对象多次调用hashCode()方法返回的哈希值是相同的

    默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法可以实现让不同对象的哈希值相同

    创建一个学生类:Student

    package com.gather.set.example;
    public class Student {
        private String name;
        private int age;
        public Student() {
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Student student = (Student) o;
            if (age != student.age) return false;
            return name != null ? name.equals(student.name) : student.name == null;
        }
        @Override
        public int hashCode() {
            int result = name != null ? name.hashCode() : 0;
            result = 31 * result + age;
            return result;
        }
    }
    

    测试类:

    package com.gather.set.example;
    public class HashDemo {
        public static void main(String[] args) {
            Student s1 = new Student("郝佳乐",20);
            System.out.println(s1.hashCode());
            System.out.println(s1.hashCode());
            System.out.println("====================");
            Student s2= new Student("郝佳乐",20);
            //通过方法重写可以实现不同对象的哈希值是相同的
            System.out.println(s2.hashCode());
            System.out.println("======================");
            System.out.println("hello".hashCode());
            System.out.println("world".hashCode());
            System.out.println("java".hashCode());
            System.out.println("=======================");
            System.out.println("重地".hashCode());
            System.out.println("通话".hashCode());
        }
    }
    

在这里插入图片描述

同一个对象多次调用hashCode()方法返回的哈希值是相同的,默认情况下,不同对象的哈希值是不同的,如过要实现不同对象的哈希值是相同的需要重写方法。在此代码中还验证了字符串内容不同时,输出的哈希值是相同的,“重地”和“通话”,这是哈希冲突导致的。

举报

相关推荐

0 条评论