容器-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)扩容机制

                    容器-list

容器-list

容器-list

容器-list

容器-list

容器-list

容器-list

容器-list

            4)操作

                实现随机访问。优先考虑for。        其次foreach

                未实现随机访问。采用iterator遍历(foreach 底层采用的也是iterator实现) 大size数据不要采用普通for循环操作

                Foreach 在对数组操作。如果内部采用对数组新增或者删除操作会抛出异常