1-
21<!-- MarkdownTOC -->
32
43- [ ArrayList简介] ( #arraylist简介 )
1918 它继承于 ** AbstractList** ,实现了 ** List** , ** RandomAccess** , ** Cloneable** , ** java.io.Serializable** 这些接口。
2019
2120 在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为** O(n)** ,求表长以及增加元素,取第 i 元素的时间复杂度为** O(1)**
22-
21+
2322 ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
24-
23+
2524 ArrayList 实现了** RandomAccess 接口** ,即提供了随机访问功能。RandomAccess 是 Java 中用来被 List 实现,为 List 提供** 快速访问功能** 的。在 ArrayList 中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。
26-
25+
2726 ArrayList 实现了** Cloneable 接口** ,即覆盖了函数 clone(),** 能被克隆** 。
28-
27+
2928 ArrayList 实现** java.io.Serializable 接口** ,这意味着ArrayList** 支持序列化** ,** 能通过序列化去传输** 。
30-
29+
3130 和 Vector 不同,** ArrayList 中的操作不是线程安全的** !所以,建议在单线程中才使用 ArrayList,而在多线程中可以选择 Vector 或者 CopyOnWriteArrayList。
3231### ArrayList核心源码
3332
@@ -177,7 +176,7 @@ public class ArrayList<E> extends AbstractList<E>
177176 newCapacity = minCapacity;
178177 // 再检查新容量是否超出了ArrayList所定义的最大容量,
179178 // 若超出了,则调用hugeCapacity()来比较minCapacity和 MAX_ARRAY_SIZE,
180- // 如果minCapacity大于最大容量,则新容量则为ArrayList定义的最大容量 ,否则,新容量大小则为 minCapacity。
179+ // 如果minCapacity大于MAX_ARRAY_SIZE,则新容量则为Interger.MAX_VALUE ,否则,新容量大小则为 MAX_ARRAY_SIZE。
181180 if (newCapacity - MAX_ARRAY_SIZE > 0 )
182181 newCapacity = hugeCapacity(minCapacity);
183182 // minCapacity is usually close to size, so this is a win:
@@ -631,7 +630,7 @@ public class ArrayList<E> extends AbstractList<E>
631630 newCapacity = minCapacity;
632631 // 再检查新容量是否超出了ArrayList所定义的最大容量,
633632 // 若超出了,则调用hugeCapacity()来比较minCapacity和 MAX_ARRAY_SIZE,
634- // 如果minCapacity大于最大容量,则新容量则为ArrayList定义的最大容量 ,否则,新容量大小则为 minCapacity。
633+ // 如果minCapacity大于MAX_ARRAY_SIZE,则新容量则为Interger.MAX_VALUE ,否则,新容量大小则为 MAX_ARRAY_SIZE。
635634 if (newCapacity - MAX_ARRAY_SIZE > 0 )
636635 newCapacity = hugeCapacity(minCapacity);
637636 // minCapacity is usually close to size, so this is a win:
@@ -653,14 +652,14 @@ public class ArrayList<E> extends AbstractList<E>
653652
6546533. .java 中的**size ()方法**是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
655654
656-
655+
657656#### 内部类
658657```java
659658 (1)private class Itr implements Iterator<E >
660659 (2)private class ListItr extends Itr implements ListIterator<E >
661660 (3)private class SubList extends AbstractList<E > implements RandomAccess
662661 (4)static final class ArrayListSpliterator<E > implements Spliterator<E >
663- ```
662+ ```
664663 ArrayList有四个内部类,其中的**Itr是实现了Iterator接口**,同时重写了里面的**hasNext ()**,**next ()**,**remove ()**等方法;其中的**ListItr**继承**Itr**,实现了**ListIterator接口**,同时重写了**hasPrevious ()**,**nextIndex ()**,**previousIndex ()**,**previous ()**,**set (E e )**,**add (E e )**等方法,所以这也可以看出了**Iterator和ListIterator的区别:**ListIterator在Iterator的基础上增加了添加对象,修改对象,逆向遍历等方法,这些是Iterator不能实现的。
665664### <font face="楷体" id="6"> ArrayList经典Demo</font>
666665
0 commit comments