哈希值就是一串数字,这个数字是通过计算的方式获取到的。
可以通过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}
2 哈希表
哈希值结构
哈希表:就是一个数组。数组中每一个元素就是链表。
桶:哈希表里面的数组中每一个元素(链表)就是一个桶。
哈希冲突:只要出现在同一个桶里面对象,就是哈希冲突。比如“赵匡胤”和“赵子龙”就是哈希冲突。
同一个桶里的元素的哈希值不一定一样。
加载因子:就是一个百分比。默认0.75,当哈希表中的桶使用比例超过了加载因子,就会进行再哈希。
在哈希:对这个哈希表进行扩容。让哈希表更大。
3 再哈希和HashSet判断唯一性的原理
源码分析