HashMap最详细讲解
数组:大小固定,连续的内存,可通过index来查询很快,添加元素如果超过数组的长度需要重新开辟数组空间把原数组复制过去,所以添加慢
链表:不是连续的内存空间,上一个保存下一个的内存地址,插入只需要把内存地址指向改变即可,所以插入块元素很快,但是查询的时候需要通过第一个元素拿到第二个元素的内存地址。再通过第二个元素拿到第三个元素的内存地址,依次查询,所以查询速度很慢
散列表:
Hash:Hash也称散列,基本原理是把任意长度的输入,通过Hash算法转换成固定长度的输出,输出值即为哈希值。
Hash的特点:
1、从hash值不可推导出原始的数据
2、输入数据微小变化会得到完全不同的hash值,相同的数据会得到相同的值
3、hash算法的执行效率要高效,即使很长的文本也能快速计算出Hash值
4、hash算法冲突的概率要很小
由于hash原理是将输入空间映射成hash空间内,而hash值得空间远小于输入的空间,根据抽屉(把十个苹果放进九个抽屉里面,无论怎么放,至少一个抽屉里面不少于两个苹果)原理。
HashMap:的底层其实就是数组+链表+红黑树,数组初始长度是16,当所有元素数量达到64个并且单个链表的数量大于8时,链表结构将升级为红黑树