HashMap底层原理
HashMap底层主要是针对key的算法,与HashSet类似,取key的哈希值模于(modulus)存储空间大小,该模数就是HashMap空间的顺序位置,里面存放了Key值和Value的地址。然而万事无完美,如果两个不同的Key,通过哈希函数得出的实际存储地址相同,那就冲突了。为了存储冲突的多个地址,Java使用了链表,但链表遍历效率较低,Java8改进为红黑树算法。当冲突越严重性能越低。哈希空间扩容后可以提高性能。HashMap对象初始化时,默认的空间是16个,并且设了一个扩充因子,默认值是0.75,也就是当哈希表中的条目超过了容量和加载因子的乘积的时候(默认16*0.75=12时),就会扩容,并重新进行哈希操作。虽然扩容后性能可以提升,但扩充过程中会重新哈希,因此扩充过程会消耗时间。