哈希值就是一串数字,这个数字是通过计算的方式获取到的。
可以通过Object里面的hashCode方法获取一个对象的哈希值。
Object里面的hashCode方法计算方式,哈希值是根据对象的地址值计算出来的。

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


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

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

1 字符串的哈希值

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

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

字符串哈希值分析.png

2 哈希表

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

哈希冲突:只要出现在同一个桶里面对象,就是哈希冲突。比如“赵匡胤”和“赵子龙”就是哈希冲突。
同一个桶里的元素的哈希值不一定一样。
加载因子:就是一个百分比。默认0.75,当哈希表中的桶使用比例超过了加载因子,就会进行再哈希。
在哈希:对这个哈希表进行扩容。让哈希表更大。

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

哈希值.png
源码分析
哈希表源码.png