Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
JavaGuide
提交
e62ee072
J
JavaGuide
项目概览
wushizhenking
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e62ee072
编写于
2月 23, 2019
作者:
Fantasywk0224
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
修改扩容(grow)部分,对于hugeCapacity()方法的解释
上级
bfb04750
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
9 addition
and
10 deletion
+9
-10
Java相关/ArrayList.md
Java相关/ArrayList.md
+9
-10
未找到文件。
Java相关/ArrayList.md
浏览文件 @
e62ee072
<!-- MarkdownTOC -->
-
[
ArrayList简介
](
#arraylist简介
)
...
...
@@ -19,15 +18,15 @@
它继承于
**AbstractList**
,实现了
**List**
,
**RandomAccess**
,
**Cloneable**
,
**java.io.Serializable**
这些接口。
在我们学数据结构的时候就知道了线性表的顺序存储,插入删除元素的时间复杂度为
**O(n)**
,求表长以及增加元素,取第 i 元素的时间复杂度为
**O(1)**
ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。
ArrayList 实现了
**RandomAccess 接口**
,即提供了随机访问功能。RandomAccess 是 Java 中用来被 List 实现,为 List 提供
**快速访问功能**
的。在 ArrayList 中,我们即可以通过元素的序号快速获取元素对象,这就是快速随机访问。
ArrayList 实现了
**Cloneable 接口**
,即覆盖了函数 clone(),
**能被克隆**
。
ArrayList 实现
**java.io.Serializable 接口**
,这意味着ArrayList
**支持序列化**
,
**能通过序列化去传输**
。
和 Vector 不同,
**ArrayList 中的操作不是线程安全的**
!所以,建议在单线程中才使用 ArrayList,而在多线程中可以选择 Vector 或者 CopyOnWriteArrayList。
### ArrayList核心源码
...
...
@@ -177,7 +176,7 @@ public class ArrayList<E> extends AbstractList<E>
newCapacity
=
minCapacity
;
//再检查新容量是否超出了ArrayList所定义的最大容量,
//若超出了,则调用hugeCapacity()来比较minCapacity和 MAX_ARRAY_SIZE,
//如果minCapacity大于
最大容量,则新容量则为ArrayList定义的最大容量,否则,新容量大小则为 minCapacity。
//如果minCapacity大于
MAX_ARRAY_SIZE,则新容量则为Interger.MAX_VALUE,否则,新容量大小则为 MAX_ARRAY_SIZE。
if
(
newCapacity
-
MAX_ARRAY_SIZE
>
0
)
newCapacity
=
hugeCapacity
(
minCapacity
);
// minCapacity is usually close to size, so this is a win:
...
...
@@ -631,7 +630,7 @@ public class ArrayList<E> extends AbstractList<E>
newCapacity
=
minCapacity
;
//再检查新容量是否超出了ArrayList所定义的最大容量,
//若超出了,则调用hugeCapacity()来比较minCapacity和 MAX_ARRAY_SIZE,
//如果minCapacity大于
最大容量,则新容量则为ArrayList定义的最大容量,否则,新容量大小则为 minCapacity。
//如果minCapacity大于
MAX_ARRAY_SIZE,则新容量则为Interger.MAX_VALUE,否则,新容量大小则为 MAX_ARRAY_SIZE。
if
(
newCapacity
-
MAX_ARRAY_SIZE
>
0
)
newCapacity
=
hugeCapacity
(
minCapacity
);
// minCapacity is usually close to size, so this is a win:
...
...
@@ -653,14 +652,14 @@ public class ArrayList<E> extends AbstractList<E>
3.
.java 中的
**size()方法**
是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!
#### 内部类
```
java
(
1
)
private
class
Itr
implements
Iterator
<
E
>
(
2
)
private
class
ListItr
extends
Itr
implements
ListIterator
<
E
>
(
3
)
private
class
SubList
extends
AbstractList
<
E
>
implements
RandomAccess
(
4
)
static
final
class
ArrayListSpliterator
<
E
>
implements
Spliterator
<
E
>
```
```
ArrayList有四个内部类,其中的
**Itr是实现了Iterator接口**
,同时重写了里面的
**hasNext()**
,
**next()**
,
**remove()**
等方法;其中的
**ListItr**
继承
**Itr**
,实现了
**ListIterator接口**
,同时重写了
**hasPrevious()**
,
**nextIndex()**
,
**previousIndex()**
,
**previous()**
,
**set(E e)**
,
**add(E e)**
等方法,所以这也可以看出了
**Iterator和ListIterator的区别:**
ListIterator在Iterator的基础上增加了添加对象,修改对象,逆向遍历等方法,这些是Iterator不能实现的。
### <font face="楷体" id="6"> ArrayList经典Demo</font>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录