JDK1.8中,hashmap采用位桶+链表+红黑树 实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。
数组:
方便查找,直接用下表,不利于扩展,扩容需要重新创建数组。因为第一次创建数组时,定义了长度,超过长度就报错了!
String[] a = new String[5];
java.lang.ArrayIndexOutOfBoundsException: 5
链表:
比如单向链表方便插入,不利于查找
散列表:
结合数组和链表的优势
哈希:
也称散列,基本原理就是把任意长度的输入,通过hash算法变成固定长度的输出。这个映射的规则就是对应的hash算法,而原始数据映射后的二进制串就是哈希值。
HASH的特点:
1、从hash值不可以反向推导出原始的数据
2、输入数据的微小变化会得到完全不同的hash值,相同的数据会得到相同的值
3、hash算法的执行效率要高效,长的文本也能快速计算出hash值
4、hash算法的冲突概率要小