当前位置: 代码迷 >> 综合 >> day08-附属
  详细解决方案

day08-附属

热度:73   发布时间:2024-03-07 04:03:49.0

哈希值就是一串数字,这个数字是通过计算的方式获取到的。

可以通过Object里面的hashCode方法获取一个对象的哈希值。

Object里面的hashCode方法计算方式,哈希值是根据对象的地址值计算出来的。

 

可以把哈希值看成对象的一个标识(特征码), 哈希值并不唯一。

 

 

【对象的哈希值通过hashCode方法可以获取到】

 

如果希望自己定义哈希值的计算规则,那么需要在【子类中重写hashCode方法】

 

1 字符串的哈希值

String里面重写了hashCode方法,并没有使用Object里面hashCode的计算方式。

public static void main(String[] args) {//创建两个字符串String s1 = new String("abc");String s2 = new String("abc");//==进行比较System.out.println(s1 == s2);//false  ==比较的是地址值。//获取这两个字符串的哈希值System.out.println(s1.hashCode());//96354System.out.println(s2.hashCode());//96354}

字符串哈希值分析.png

2 哈希表

哈希值结构

哈希值结构.png

哈希表:就是一个数组。数组中每一个元素就是链表。

桶:哈希表里面的数组中每一个元素(链表)就是一个桶。

 

哈希冲突:只要出现在同一个桶里面对象,就是哈希冲突。比如“赵匡胤”和“赵子龙”就是哈希冲突。

同一个桶里的元素的哈希值不一定一样。

加载因子:就是一个百分比。默认0.75,当哈希表中的桶使用比例超过了加载因子,就会进行再哈希。

在哈希:对这个哈希表进行扩容。让哈希表更大。

 

3 再哈希和HashSet判断唯一性的原理

哈希值.png

源码分析

哈希表源码.png