hashCode()方法 和 hash()方法

hashCode在JAVA中,代表了对象的一种特征。比如任何对象都有toString方法一样

只要比较2个的哈希码(是一个int数字)不同则这肯定是不同的对象。反过来不一定

同一个对象有相同的hashcode值  逆否:hashcode不同,对象不同, 若hashcode同了,然后再判断内容

哈希码是一种数据结构算法,在JAVA中,常见的哈希码算法获取到的哈希码具体值是怎么获取到的呢?


  相同对象放到的是一个对象池子里面, 里面的取出来的对象的hashcode肯定是同     String a ="abcd";
    String b = "abcd";
    System.out.println(a.hashCode() +"  " + b.hashCode());  2987074  2987074

1.在String类中的hashCode是根据String类中包含的字符串获取的,根据哈希算法获取到一个哈希码,那么只要我的字符内容是相等的,我的哈希码也是相同的。


        Integer a =11;
        Integer b = 11;
        System.out.println(b.hashCode()==a.hashCode());     //true

Integer a =12345;
System.out.println(a.hashCode()); // 输出 12345

2.Integer类中的hashCode和String是一样的,也是根据类中包含的值去生成的哈希码。两个相同大小的integer值,那么它的hashCode也是相等的



3.Object类中的hashCode则和之前的不一样了,他是根据对象的内存地址经过哈希算法之后获取到的哈希码,由于每个对象的内存地址不相同,所以hashCode是一般不同的。


时间: 2024-10-09 05:23:12

hashCode()方法 和 hash()方法的相关文章

NSObject的hash方法

说明 本示例仅仅演示一个对象什么时候执行hash方法. 细节 1. 必要的Model类,重载了hash方法用以反映Hash方法是否被调用了 2. 测试 // // ViewController.m // Hash // // Created by YouXianMing on 16/4/15. // Copyright © 2016年 YouXianMing. All rights reserved. // #import "ViewController.h" #import &quo

java为什么要重写hashCode方法和equals方法?

之前发布过一篇文章说的是关于 equals方法重写 http://www.cnblogs.com/aL0n4k/p/4777333.html 下面就hashCode方法发表一下本人的理解,仅供参考,交流. 在 关于java重写equals方法 已经提及说,比较2个对象的时候,要比较他们各自的属性. 那么重写hashCode方法是因为我们在接触到集合的时候,里面有个Set接口,他只能添加无序以及不重复的对象元素. 那有人会问,既然是这样我们直接用equals判断不就完了么? 实际上对Set集合而言

php memcache hash方法均衡性测试

支持两种hash方法: crc32 fnv 配置如下: ;  Hash function {crc32, fnv} memcache.hash_function=fnv set key脚本: <?php $cluster = array( array('host' => '127.0.0.1', 'port' => '11211'), array('host' => '127.0.0.1', 'port' => '11212'), array('host' => '12

集合类hashCode()方法和equals()方法

1.散列码: Object中的HashCode方法会返回该对象的的内存真实地址的整数化表示,这个形象的不是真正抵制的整数值就是哈希码. 2.利用哈希码向集合中插入数据的顺序? 向HashSet中添加对象时,HashSet先通过该对象的HashCode()计算出相应的桶,然后再根据equals()方法找到相应的对象,如果容器中已存在该对象则不再添加,如果不存在,则添加进去. 3.什么时候重写hashCode()方法?         String和Integer这些Java自带的类都重写了hash

Java 重写hashCode 方法和equals方法

package Container; import java.util.HashSet; import java.util.Iterator; /* Set 元素是无序的(存入和取出的顺序不一定一致),元素不可以重复 |---HashSet:底层数据结构是哈希表 | HashSet是如何保证元素唯一性呢? | 是通过两个方法来完成的 hashCode 和 equals来完成的 | 如果元素的hashCode值相同,才会判断 equals 是否为true | 如果hashCode值不相同,不会调用

java基础之问题:请说出hashCode方法、equals方法、HashSet、HashMap之间的关系

①HashSet是采用HashMap来实现的:这个HashMap的key就是放进HashSet中的对象,value就是一个Object类型的对象 ②当调用HashSet的add方法时,实际上是想HashMap中增加了一行(key-value对),该行的key就是往HashSet增加的那个对象,该行的value就是一个Object类型的常量. ③HashMap底层采用数组来维护 ④调用增加的那个对象的hashCode方法,来得到一个hashCode,然后根据该值来计算出一个数组的下标索引(计算出数

HASH方法课下补分博客

课堂要求:利用除留余数法为下列关键字集合的存储设计hash函数,并画出分别用开放寻址法和拉链法解决冲突得到的空间存储状态(散列因子取0.75)关键字集合:85,75,57,60,65,(你的8位学号相加值),98,74,89,12,5,46,97,13,69,52,92.完成计算并提交计算过程. 实践要点:通过课上对hash方法以及散列函数的学习,了解散列冲突的机制,并学习解决散列冲突的方法.主要学习和实践的方法是开放地址法和拉链法,首先需要理解这两种方法的实现过程,然后运用到实际的题目中去解决

数组去重--hash方法

hash方法我以前百度找到的,经常用性能好速度快,本文章主要是一步步解释hash方法的过程(其实没多少步) 在这里就能看出每个自定义下标都是独一无二的,其实就相当于数组arr已经去重了 剩下我们就需要把自定义下标给抽取出来放在新数组 代码就这么点,就这么简单,分两步的目的是想简单解释去重过程. 原文地址:https://www.cnblogs.com/konghaowei/p/10907325.html

String类型中ToString hashCode equals compareTo等方法的经典实现

private final char value[]; private int hash; // Default to 0 public String(String original) { this.value = original.value; this.hash = original.hash; } public String(char value[]) { this.value = Arrays.copyOf(value, value.length); } String: |--Compa