暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
集合上.pdf
134
25页
0次
2022-09-21
10墨值下载
ArrayList
.
  ArrayList类实现接口List,ArrayList具备了List接口的特性 (有序,重复,索引)
ArrayList集合底层的实现原理是数组,大小可变 (存储对象的时候长度无需考虑).
数组的特点 : 查询速度快,增删慢.
数组的默认长度是10,每次的扩容是原来长度的1.5.
ArrayList是线程不安全的集合,运行速度快.
ArrayList源码解析
..
ArrayList类成员变量
...
private
private
static
static
final
final
int
int
DEFAULT_CAPACITY
DEFAULT_CAPACITY
=
=
10
10
;
;
//
//
private
private
static
static
final
final
Object[] EMPTY_ELEMENTDATA = {};
Object[] EMPTY_ELEMENTDATA = {};
//
//
transient
transient
Object[] elementData;
Object[] elementData;
//ArrayList
//ArrayList
private
private
int
int
size;
size;
//
//
private
private
static
static
final
final
int
int
MAX_ARRAY_SIZE
MAX_ARRAY_SIZE
=
=
Integer.MAX_VALUE -
Integer.MAX_VALUE -
8
8
;
;
//
//
1
2
3
4
5
6
7
8
java
ArrayList集合类的构造方法
...
//
//
public
public
ArrayList
ArrayList
()
()
{
{
this
this
.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
}
private
private
static
static
final
final
Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
//
//
1
2
3
4
5
java
//
//
public
public
ArrayList
ArrayList
(
(
int
int
10
10
)
)
{
{
if
if
(initialCapacity >
(initialCapacity >
0
0
) {
) {
//10
//10
this
this
.elementData =
.elementData =
new
new
Object
Object
[
[
10
10
];
];
}
}
else
else
if
if
(initialCapacity ==
(initialCapacity ==
0
0
) {
) {
this
this
.elementData = EMPTY_ELEMENTDATA;
.elementData = EMPTY_ELEMENTDATA;
}
}
else
else
{
{
throw
throw
new
new
IllegalArgumentException
IllegalArgumentException
(
(
"Illegal Capacity: "
"Illegal Capacity: "
+
+
initialCapacity);
initialCapacity);
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
java
ArrayList集合类的方法add()
...
new
new
ArrayList
ArrayList
<>().add(
<>().add(
"abc"
"abc"
);
);
//
//
public
public
boolean
boolean
add
add
(
(
"abc"
"abc"
)
)
{
{
// (1)
// (1)
ensureCapacityInternal(size +
ensureCapacityInternal(size +
1
1
);
);
//abc,0,size++
//abc,0,size++
elementData[size++] =
elementData[size++] =
"abc"
"abc"
;
;
//10
//10
return
return
true
true
;
;
}
}
1
2
3
4
5
6
7
8
java
 
//, 1
//, 1
private
private
void
void
ensureCapacityInternal
ensureCapacityInternal
(
(
int
int
minCapacity =
minCapacity =
1
1
)
)
{
{
//calculateCapacity , , 1
//calculateCapacity , , 1
// ensureExplicitCapacity (10)
// ensureExplicitCapacity (10)
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}
}
1
2
3
4
5
6
java
 
//, 10
//, 10
private
private
static
static
int
int
calculateCapacity
calculateCapacity
(Object[] elementData,
(Object[] elementData,
int
int
minCapacity =
minCapacity =
1
1
)
)
{
{
// ==
// ==
if
if
(elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
(elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
// max(10,1)
// max(10,1)
return
return
Math.max(DEFAULT_CAPACITY, minCapacity);
Math.max(DEFAULT_CAPACITY, minCapacity);
}
}
return
return
minCapacity;
minCapacity;
}
}
1
2
3
4
5
6
7
8
9
java
 
//
//
private
private
void
void
ensureExplicitCapacity
ensureExplicitCapacity
(
(
int
int
minCapacity =
minCapacity =
10
10
)
)
{
{
modCount++;
modCount++;
// 10 - 0 > 0
// 10 - 0 > 0
if
if
(minCapacity - elementData.length >
(minCapacity - elementData.length >
0
0
)
)
//grow(10)
//grow(10)
grow(minCapacity);
grow(minCapacity);
}
}
1
2
3
4
5
6
7
8
java
 
//,(10)
//,(10)
private
private
void
void
grow
grow
(
(
int
int
minCapacity =
minCapacity =
10
10
)
)
{
{
//oldCapacity, = 0
//oldCapacity, = 0
int
int
oldCapacity
oldCapacity
=
=
elementData.length;
elementData.length;
// 0
// 0
// = + ( / 2)
// = + ( / 2)
int
int
newCapacity
newCapacity
=
=
oldCapacity + (oldCapacity >>
oldCapacity + (oldCapacity >>
1
1
);
);
// 0
// 0
1
2
3
4
5
6
java
of 25
10墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文档被以下合辑收录

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜