ArrayList 扩容】的更多相关文章

都说新的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中…
 都说新的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 */…
jdk1.5 public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = (E[])new Object[initialCapacity]; } 可以看出,如果在初始化ArrayList时进行赋值,那么开始是…
一段java代码 String e = "q3234v"; List<String> list = new ArrayList<String>(); for (int i = 0; i < 25; i++) { list.add(e); } 执行这段代码,list会扩容几次 查看ArrayList的add方法,在添加元素之前会执行ensureCapacityInternal方法 这个时候size为0 public boolean add(E e) { en…
1:代码解读和分析 1.1:构造方法分析 1: public ArrayList(int initialCapacity) { ) { this.elementData = new Object[initialCapacity]; } ) { this.elementData = EMPTY_ELEMENTDATA; } else { throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); }…
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的…