JDK7集合框架原始碼學習-ArrayList(1)
整個ArrayList用的最多的就是System類提供的本地方法.
和JDK6不一樣,JDK7的ArrayList建構函式,建立的是一個沒有任何元素的陣列.而JDK6預設建立10個元素的陣列.
新增元素流程
add之前,先保證容量.如果陣列是空的,則分配10個元素.否則增長目前陣列容量的一半.
其他的方法也是類似
public static void arraycopy( src, int srcPos, dest, int destPos, int length)
和JDK6不一樣,JDK7的ArrayList建構函式,建立的是一個沒有任何元素的陣列.而JDK6預設建立10個元素的陣列.
新增元素流程
- 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 = Math.max(DEFAULT_CAPACITY, minCapacity);
- }
- ensureExplicitCapacity(minCapacity);
- }
- private void ensureExplicitCapacity(int minCapacity) {
- modCount++;
- // overflow-conscious code
- if (minCapacity - elementData.length > 0)
- grow(minCapacity);
- }
- private void grow(int minCapacity) {
- // overflow-conscious code
- int oldCapacity = elementData.length;
- int newCapacity = oldCapacity + (oldCapacity >> 1);
- if (newCapacity - minCapacity < 0)
- newCapacity = minCapacity;
- if (newCapacity - MAX_ARRAY_SIZE > 0)
- newCapacity = hugeCapacity(minCapacity);
- // minCapacity is usually close to size, so this is a win:
- elementData = Arrays.copyOf(elementData, newCapacity);
- }
add之前,先保證容量.如果陣列是空的,則分配10個元素.否則增長目前陣列容量的一半.
其他的方法也是類似
- public void add(int index, E element) {
- rangeCheckForAdd(index);
- ensureCapacityInternal(size + 1); // Increments modCount!!
- System.arraycopy(elementData, index, elementData, index + 1,
- size - index);
- elementData[index] = element;
- size++;
- }
-
- public E remove(int index) {
- rangeCheck(index);
- modCount++;
- E oldValue = elementData(index);
- int numMoved = size - index - 1;
- if (numMoved > 0)
- System.arraycopy(elementData, index+1, elementData, index,
- numMoved);
- elementData[--size] = null; // clear to let GC do its work
- return oldValue;
- }
-
- public boolean remove(Object o) {
- if (o == null) {
- for (int index = 0; index < size; index++)
- if (elementData[index] == null) {
- fastRemove(index);
- return true;
- }
- } else {
- for (int index = 0; index < size; index++)
- if (o.equals(elementData[index])) {
- fastRemove(index);
- return true;
- }
- }
- return false;
- }
-
- public boolean addAll(Collection<!--? extends E> c) {
- Object[] a = c.toArray();
- int numNew = a.length;
- ensureCapacityInternal(size + numNew); // Increments modCount
- System.arraycopy(a, 0, elementData, size, numNew);
- size += numNew;
- return numNew != 0;
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-2121444/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 集合框架原始碼學習之ArrayList框架原始碼
- Java集合原始碼學習(2)ArrayListJava原始碼
- Java 集合框架------ArrayList原始碼分析Java框架原始碼
- 集合框架原始碼學習之LinkedList框架原始碼
- 集合-ArrayList 原始碼解析原始碼
- Java集合原始碼學習(1)介面Java原始碼
- 【Java集合】ArrayList原始碼分析Java原始碼
- JAVA集合:ArrayList原始碼分析Java原始碼
- 集合原始碼分析[3]-ArrayList 原始碼分析原始碼
- Java集合原始碼剖析——ArrayList原始碼剖析Java原始碼
- Java容器原始碼學習--ArrayList原始碼分析Java原始碼
- java集合原始碼分析(三):ArrayListJava原始碼
- Java集合之ArrayList原始碼解析Java原始碼
- 集合框架原始碼學習之HashMap(JDK1.8)框架原始碼HashMapJDK
- Java容器類框架分析(1)ArrayList原始碼分析Java框架原始碼
- JAVA ArrayList集合底層原始碼分析Java原始碼
- 1、ArrayList原始碼解析原始碼
- Java集合框架(一)-ArrayListJava框架
- 集合框架2- ArrayList框架
- 死磕 java集合之ArrayList原始碼分析Java原始碼
- Java集合-ArrayList原始碼解析-JDK1.8Java原始碼JDK
- java集合學習(一):詳解ArrayListJava
- 純手寫Arraylist集合框架框架
- Java 集合 ArrayList 原始碼分析(帶著問題看原始碼)Java原始碼
- 【Java集合原始碼剖析】Java集合框架Java原始碼框架
- Java類集框架 —— ArrayList原始碼分析Java框架原始碼
- Java集合原始碼學習(4)HashSetJava原始碼
- Java集合原始碼學習(5)HashMapJava原始碼HashMap
- Java集合原始碼學習(3)LinkedListJava原始碼
- 還在深入瞭解集合框架(ArrayList、LinkedList)原始碼?先看看這篇文章吧框架原始碼
- Okio 框架原始碼學習框架原始碼
- Java集合框架學習Java框架
- JAVA集合:常見Set原始碼學習Java原始碼
- 集合原始碼分析[1]-Collection 原始碼分析原始碼
- UiAutomator原始碼學習(1)-- UiDeviceUI原始碼IDEdev
- ArrayList原始碼解析原始碼
- ArrayList 原始碼分析原始碼
- ArrayList原始碼分析原始碼
- [原始碼分析]ArrayList原始碼