/** * |---Collection接口 * |---List接口:存储有序的,可重复的数据 * |---ArrayList:List接口的主要实现类,线程不安全的,效率高,底层:Object数组存放 * |---LinkedList:对于频繁的插入和删除操作,使用它效率会更高。底层使用双向链表存储 * |---Vector:List接口的古老实现类,线程安全的,效率低,底层:Object数组存放 * 面试题:ArrayList,LinkedList,Vector的异同 * 同:都实现了List接口,存储的特点相同:都是有序的,可重复的数据 * 不同: * ArrayList源码分析:jdk 7 情况下 * ArrayList=new ArrayList();//底层创建了长度是10的Object[]数组 * list.add(123);//elementData[0]=new Integer(123); * ... * list.add(11);//如果此次elementData数组的长度不够了,就扩容 * 默认情况下,扩容为原来容量的1.5倍,同时将原有数组中的数据copy到新数组中 * * 结论:使用带参数的构造器 * ArrayList list=new ArrayList(int Capacity) * jdk 8: * ArrayList list= new ArrayList();//底层Object elementData{}初始化,没有赋以长度 * 第一次调用add方法的时候才会创建长度为10的数组 * 后续扩容操作与jdk7没有区别 * 小结:jdk 7 的ArrayList类似于单例模式的饿汉式 * jdk 8 的ArrayList对象的创建类似于单例模式的懒汉式 * * LinkedList的源码分析: * LinkedList list=new LinkedList();内部声明了Node类型的first和last属性 * 默认值为null * List.add(123);//将123封装到Node中 * Node体现为linkedList双向链表的特点 * * Vector源码分析: * 扩容时默认扩容为原来长度的2倍 * @author Baobao * @create 2021-08-11 22:49 */
【Java-11】关于List
最新推荐文章于 2022-01-10 09:55:41 发布