数组和链表的特点
数组支持随机存取;
分配数组需要连续的内存空间;
链表不支持随机存取;
链表不需要连续的内存空间;
哈希表
由于数组和链表具有各自的优缺点和适用场景,所以为了进一步提高数据的读写性能,哈希表就诞生了,即哈希表就是”数组+链表“,数组构成hash bucket,链表解决hash冲突。然而这里所说的链表已经不是狭义上的链表了,它可以是任何适用的数据结构,例如AVL树,红黑树等。在java 8中的HashMap,当链表中的数据超过一定的阈值后,链表就会转化为红黑树,以避免因为hash冲突过于严重,导致HashMap性能急剧下降。
哈希函数
哈希函数是哈希表中最重要的函数,它决定了一个元素在哈希表中所属bucket的位置,如果哈希函数设计的不合理,那么就会产生比较严重的哈希冲突,使得哈希表性能下降。
在不同的应用领域,哈希函数的设计原则可能有所差异,但有一个总的指导思想:哈希函数在计算哈希值时,应尽量包含元素的更多信息,什么意思呢?
public class Person {
private String name;
private Integer age;
@Override
public int hashCode() {
return name.hashCode() + age.hashCode();
}
}
如果把Person对象