
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
//检查集合中数组的容量, 参数是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));
}
}
//计算容量方法, 返回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;
}
}
//扩容
//扩容
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);
}
}
//增长的方法,参数是(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
文档被以下合辑收录
评论