哈希值
哈希值是由十进制数构成的值,在Java中根据对象的物理地址和属性、方法等映射出来的一个值(模拟的逻辑地址,并不是一个实际的存储物理地址),也就是说两个对象物理地址相同哈希值一定相同,但是哈希值相同的两个对象物理地址并不一定相同。
在Java中哈希值可以通过Object的hashCode的方法获取
在java中所有的引用类型每个引用都有相应的哈希值包括数组
作用:提升查询数据的速度
哈希表
哈希表数其实是一种数据结构,在java中哈希表就是一个存放着哈希值通过哈希函数映射出来一个个值的数组。只是数组存放的是单一的数据,而哈希表存放的是键值对(哈希值和对象)。在Java中哈希表的数据结构是数组+链表或者数组+红黑树
哈希冲突:在哈希表中哈希值一样的对象会存放在数组的同一位置,为了查询方便通过链表或者红黑树的数据结构将它们存储(链表长度等于8自动转换为红黑树)
【关于哈希值存放数组的位置】它会根据数组的长度再结合哈希值得到哈希函数通过该函数得出一个在数组位置的索引值将哈希值放在该位置中。
【数组扩容】哈希表中数组容量达到增长因子的容量就会进行扩容,在HashSet是到占数组容量的75%就会以数组的二倍进行扩容