1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00

Update ArrayList.md

This commit is contained in:
Snailclimb 2018-08-10 07:39:35 +08:00 committed by GitHub
parent ae4f2acc51
commit 9ad273ab43
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,19 +1,19 @@
<!-- MarkdownTOC --> <!-- MarkdownTOC -->
- [ArrayList简介](#ArrayList简介) - [ArrayList简介](#arraylist简介)
- [ArrayList核心源码](#ArrayList核心源码) - [ArrayList核心源码](#arraylist核心源码)
- [ArrayList源码分析](#ArrayList源码分析) - [ArrayList源码分析](#arraylist源码分析)
- [System.arraycopy\(\)和Arrays.copyOf\(\)方法](#systemarraycopy和arrayscopyof方法) - [System.arraycopy\(\)和Arrays.copyOf\(\)方法](#systemarraycopy和arrayscopyof方法)
- [两者联系与区别](#两者联系与区别) - [两者联系与区别](#两者联系与区别)
- [ArrayList核心扩容技术](#ArrayList核心扩容技术) - [ArrayList核心扩容技术](#arraylist核心扩容技术)
- [内部类](#内部类) - [内部类](#内部类)
- [ArrayList经典Demo](#ArrayList经典demo) - [ArrayList经典Demo](#arraylist经典demo)
<!-- /MarkdownTOC --> <!-- /MarkdownTOC -->
### <font face="楷体" id="3"> ArrayList简介</font> ### <font face="楷体" id="3">ArrayList简介</font>
  ArrayList 的底层是数组队列,相当于<font color="red">动态数组</font>。与Java中的数组相比它的容量能动态增长。在添加大量元素前应用程序可以使用<font color="red">ensureCapacity </font>操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。它继承于**AbstractList**,实现了**List**, **RandomAccess**, **Cloneable**, **java.io.Serializable**这些接口。   ArrayList 的底层是数组队列,相当于<font color="red">动态数组</font>。与Java中的数组相比它的容量能动态增长。在添加大量元素前应用程序可以使用<font color="red">ensureCapacity </font>操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。它继承于**AbstractList**,实现了**List**, **RandomAccess**, **Cloneable**, **java.io.Serializable**这些接口。
  在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为**On**,求表长以及增加元素,取第 i 元素的时间复杂度为**O1**   在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为**On**,求表长以及增加元素,取第 i 元素的时间复杂度为**O1**
  ArrayList 继承了AbstractList实现了List。它是一个数组队列提供了相关的添加、删除、修改、遍历等功能。   ArrayList 继承了AbstractList实现了List。它是一个数组队列提供了相关的添加、删除、修改、遍历等功能。
@ -21,7 +21,7 @@
  ArrayList 实现了**Cloneable接口**即覆盖了函数clone()**能被克隆**。   ArrayList 实现了**Cloneable接口**即覆盖了函数clone()**能被克隆**。
  ArrayList 实现**java.io.Serializable接口**这意味着ArrayList**支持序列化****能通过序列化去传输**。   ArrayList 实现**java.io.Serializable接口**这意味着ArrayList**支持序列化****能通过序列化去传输**。
  和Vector不同**ArrayList中的操作不是线程安全的**所以建议在单线程中才使用ArrayList而在多线程中可以选择Vector或者CopyOnWriteArrayList。   和Vector不同**ArrayList中的操作不是线程安全的**所以建议在单线程中才使用ArrayList而在多线程中可以选择Vector或者CopyOnWriteArrayList。
### <font face="楷体" id="4"> ArrayList核心源码</font> ### <font face="楷体" id="4">ArrayList核心源码</font>
```java ```java
package java.util; package java.util;
@ -557,7 +557,7 @@ public class ArrayList<E> extends AbstractList<E>
return Arrays.copyOf(elementData, size); return Arrays.copyOf(elementData, size);
} }
``` ```
##### 两者联系与区别 ##### 两者联系与区别
**联系:** **联系:**
看两者源代码可以发现<font color="red">copyOf()</font>内部调用了<font color="red">System.arraycopy()</font>方法 看两者源代码可以发现<font color="red">copyOf()</font>内部调用了<font color="red">System.arraycopy()</font>方法
**区别:** **区别:**