容器-list
List 接口为有序集合接口 可以存储重复数据。不是线程安全的
顺序访问意味着从第一个元素开始逐个地读取元素。链表只 能顺序访问:要读取链表的第十个元素,得先读取前九个元素,并沿链接找到第十个元素。
随机 访问意味着可直接跳到第十个元素。经常说数组的读取速度更快,这是因为它们支持随机访 问。很多情况都要求能够随机访问,因此数组用得很多。数组和链表还被用来实现其他数据结构。
一、ArrayList
1) 底层实现 Object[]. 数组 支持随机访问
实现了RandomAccess 接口 在源码中通过判断是是否为RandomAccess实例来表示当前容器是否支持随机访问
RandomAccess 接口就是一个标识
底层实现上。BinarySearch()方法内部。
判断当前集合是否是randomAccess 实例。如果是那么就采用Collections.indexBinarySearch()方法来实现随机查找 没有实现的采用Collectins.IteratorBinarySearch();
2)底层数据源码实现
构造。
AarrayList() 默认长度为0的 Object[]={} 数组
ArrayList(int initialCapacity)。 如果指定当前数组的长度。如果当前长度大于0 分配当前长度的数组 如果指定当前数组为0 会根据默认分配大小为10的数组
3)扩容机制
4)操作
实现随机访问。优先考虑for。 其次foreach
未实现随机访问。采用iterator遍历(foreach 底层采用的也是iterator实现) 大size数据不要采用普通for循环操作
Foreach 在对数组操作。如果内部采用对数组新增或者删除操作会抛出异常