ArrayList 扩容 和 Vector】的更多相关文章

public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } private void ensureCapacityInternal(int minCapacity) { // 如果是个空数组 if (elementData == EMPTY_ELEMENTDATA) { // 取minCapacity和10的…
都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事 就用下面这段代码在jdk的三个版本运行看了下效果 import java.lang.reflect.Field; import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { ArrayList<Integer> list1 = new ArrayList<Intege…
都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事 就用下面这段代码在jdk的三个版本运行看了下效果: import java.lang.reflect.Field; import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { ArrayList<Integer> list1 = new ArrayList<Integ…
面试中经常问到的问题之一就是List的扩容机制了,他是怎么做到扩容的,大家都能答出来底层是数组,复制一个数组来扩容,但是再具体一点来说,大家就不知道该怎么说了,如果不看源码说这么多确实就差不多了,但是看了源码你会说的更多,更详细,更具体,本篇主要看的是jdk1.8  至于其他版本大同小异,看看就知道了,言归正传 1)List扩容实现步骤 总的来说就是分两步:1.扩容 把原来的数组复制到另一个内存空间更大的数组中 2.添加元素 把新元素添加到扩容以后的数组中 2)源码分析 先把ArrayList中…
集合体系之List及其子类ArrayList,LinkedList与Vector及其迭代器知识 List(接口) 特点:有序(存储与取出顺序相同),可重复 List子类特点: ​ ArrayList:底层结构是数组,查询快,增删慢. ​ 线程不安全,效率高. ​ Vector:底层结构是数组,查询快,增删慢. ​ 线程安全,效率低. ​ LinkedList:底层结构是链表,查询慢,增删快. ​ 线程不安全,效率高. List特有功能 添加功能 void add(int index, E ele…
 都说新的Arraylist 扩容是(1.5倍+1) 看了1.8的源代码发现不是这么回事 就用下面这段代码在jdk的三个版本运行看了下效果: import java.lang.reflect.Field; import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { ArrayList<Integer> list1 = new ArrayList<Inte…
ArrayList初始化 问题:执行以下代码后,这个list的列表大小(size)和容量(capacity)分别是多大? List<String> list = new ArrayList<>(); 答案是:size = 0, capacity = 0,即我们使用无参构造方法创建ArrayList对象时,大小和容量都是为0. 那么如果我继续执行: for(int i=0;i<100;i++) { list.add(String.valueOf(i)); } 每次add之后,s…
一.先从 ArrayList 的构造函数说起 ArrayList有三种方式来初始化,构造方法源码如下: 1 /** 2 * 默认初始容量大小 3 */ 4 private static final int DEFAULT_CAPACITY = 10; 5 6 7 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; 8 9 /** 10 *默认构造函数,使用初始容量10构造一个空列表(无参数构造) 11 */…
相同: 都是List接口的常用类,List接口:存储有序,可重复的数据 差异: ArrayList: 是作为List接口中的主要实现的类:线程不安全,效率高.底层使用是Object[] elementData存储的 源码分析: 在JDK7.0中: ArrayList Lsit = new ArrayList(); 首先是创建了一个长度为10的Object数组,如果数组不够的话,扩容1.5倍,同时将原来的数组复制到现在数组中 所以,建议开发中使用带参数的构造器,如:ArrayList Lsit =…
Collection List 在Collection的基础上引入了有序的概念,位置精确:允许相同元素.在列表上迭代通常优于索引遍历.特殊的ListIterator迭代器允许元素插入.替换,双向访问,从列表中的制定位置开始(根据index获取index位置的元素).未实现get方法. AbstractList 实现了List中的一些方法,支持随机访问.lastIndexOf通过特殊迭代器能够制定开始位置,从后遍历的特性来实现.直接通过指定的位置,借助特殊迭代器找到. Vector 实现可增长的数…