ArrayList
底层实现原理是数组。
因为数组是定长的,所以在最初的时候建立了一个初始化长度默认16的基础数组,加素因子默认是0.75。可存储长度为16*0.75=12。
当存储数据达到12的时候,数组会内部操作建一个更长的数组,将现在数组的数据拷入新的数组。
所以就完成了动态添加且不定长度的原因。
LinkedList
底层实现原理是链表
链表本身可以自动增长的,所以是利用链表的特性直接完成动态长度的。
Hashset
底层实现是链表和数组的结合体(对应关系是Map键值对的关系)。
最初是数组的存储的方式以及增长方式。但是数组中存的是哈希值。
当哈希值相同的时候就按照链表的方式存储在此哈希值数组的下方。
如假设String“abc” 和String“efg”哈希值相同。
存“adc”:1,调用哈希值 2,在数组中找有没有相同的哈希值,如果没有,就将此哈希值添加到数组中(map,键值对关系找到对象)。
存“efg”:1,调用哈希值 2,在数组中找到相同的哈希值,3,用equals判断两个值是否相等,如果相等则重复,不添加。如果不相等,则以链表的方式储存(桶储存)