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

修改排版

This commit is contained in:
Snailclimb 2018-08-16 18:53:25 +08:00 committed by GitHub
parent 3d7c7edef4
commit a2ef7bf7a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -13,15 +13,24 @@
<!-- /MarkdownTOC --> <!-- /MarkdownTOC -->
### <font face="楷体" id="3">ArrayList简介</font> ### ArrayList简介
  ArrayList 的底层是数组队列,相当于<font color="red">动态数组</font>。与Java中的数组相比它的容量能动态增长。在添加大量元素前应用程序可以使用<font color="red">ensureCapacity </font>操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。它继承于**AbstractList**,实现了**List**, **RandomAccess**, **Cloneable**, **java.io.Serializable**这些接口。   ArrayList 的底层是数组队列,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。在添加大量元素前,应用程序可以使用`ensureCapacity`操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。
  在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为**On**,求表长以及增加元素,取第 i 元素的时间复杂度为**O1**
  ArrayList 继承了AbstractList实现了List。它是一个数组队列提供了相关的添加、删除、修改、遍历等功能。 它继承于 **AbstractList**,实现了 **List**, **RandomAccess**, **Cloneable**, **java.io.Serializable** 这些接口。
  ArrayList 实现了**RandmoAccess接口**即提供了随机访问功能。RandmoAccess是java中用来被List实现为List提供**快速访问功能**的。在ArrayList中我们即可以通过元素的序号快速获取元素对象这就是快速随机访问。
在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为**On**,求表长以及增加元素,取第 i 元素的时间复杂度为**O1**
  ArrayList 继承了AbstractList实现了List。它是一个数组队列提供了相关的添加、删除、修改、遍历等功能。
  ArrayList 实现了**RandmoAccess 接口**即提供了随机访问功能。RandmoAccess 是 Java 中用来被 List 实现,为 List 提供**快速访问功能**的。在 ArrayList 中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。
  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> ### ArrayList核心源码
```java ```java
package java.util; package java.util;
@ -559,10 +568,10 @@ public class ArrayList<E> extends AbstractList<E>
``` ```
##### 两者联系与区别 ##### 两者联系与区别
**联系:** **联系:**
看两者源代码可以发现<font color="red">copyOf()</font>内部调用了<font color="red">System.arraycopy()</font>方法 看两者源代码可以发现`copyOf()`内部调用了`System.arraycopy()`方法
**区别:** **区别:**
1<font color="red">arraycopy()需要目标数组,将原数组拷贝到你自己定义的数组里</font>,而且可以选择拷贝的起点和长度以及放入新数组中的位置 1. arraycopy()需要目标数组,将原数组拷贝到你自己定义的数组里,而且可以选择拷贝的起点和长度以及放入新数组中的位置
2<font color="red">copyOf()是系统自动在内部新建一个数组,并返回该数组。</font> 2. copyOf()是系统自动在内部新建一个数组,并返回该数组。
#### ArrayList 核心扩容技术 #### ArrayList 核心扩容技术
```java ```java
//下面是ArrayList的扩容机制 //下面是ArrayList的扩容机制