第1篇:List-ArrayList
第1篇:List-ArrayList
Addall
indexof
lastindexof
2 属性:elementData ,size
3 构造方法 3个
https://blog.csdn.net/weixin_36212560/article/details/114182663
添加元素:add
add() 方法将元素插入到指定位置的动态数组中。
add() 方法的语法为:
arraylist.add(int index,E element)
注:arraylist 是 ArrayList 类的一个对象。
参数说明:
- index(可选参数)- 表示元素所插入处的索引值
- element - 要插入的元素
如果 index 没有传入实际参数,元素将追加至数组的最末尾。
4 主动缩扩容
https://blog.csdn.net/qq_17845335/article/details/125385564
5 添加多个元素
// 从指定位置开始,将指定集合中的所有元素插入此列表。 将当前在该位置的元素(如果有)和任何后续元素向右移动(增加它们的索引)。 新元素将按照指定集合
// 的迭代器返回的顺序出现在列表中
public boolean addAll(int index, Collection<? extends E> c) {
rangeCheckForAdd(index);
Object[] a = c.toArray();
int numNew = a.length;
ensureCapacityInternal(size + numNew); // Increments modCount
int numMoved = size - index;
if (numMoved > 0)
System.arraycopy(elementData, index, elementData, index + numNew,
numMoved);
System.arraycopy(a, 0, elementData, index, numNew);
size += numNew;
return numNew != 0;
}
6 移除读个元素
// 移除此列表中指定位置的元素。将任何后续元素向左移动,并返回旧元素
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}
7 查找单个元素contains
方法则巧妙的使用了indexOf
进行实现,如果元素第一次出现的索引大于0,就说明在列表中存在。
// 返回此列表中指定元素第一次出现的索引,如果此列表不包含该元素,则返回 -1
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
// 返回此列表中指定元素最后一次出现的索引,如果此列表不包含该元素,则返回 -1
public int lastIndexOf(Object o) {
if (o == null) {
for (int i = size-1; i >= 0; i--)
if (elementData[i]==null)
return i;
} else {
for (int i = size-1; i >= 0; i--)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
// 如果此列表包含指定的元素,则返回true。 具体来说,当且仅当此列表包含至少一个元素e使得
// (o==null ? e==null : o.equals(e))时才返回true
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
8 获取指定位置的元素
// 返回此列表中指定位置的元素
public E get(int index) {
rangeCheck(index);
return elementData(index);
}
// 检查索引是否在有效范围内,只在列表访问操作前调用
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
E elementData(int index) {
return (E) elementData[index];
}
9 列表转换为数组
// 以适当的顺序(从第一个元素到最后一个元素)返回一个包含此列表中所有元素的数组。
public Object[] toArray() {
return Arrays.copyOf(elementData, size);
}
// 以适当的顺序(从第一个元素到最后一个元素)返回一个包含此列表中所有元素的数组,允许指定数组接收。
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
10 求哈希值hashcode
11 判断相等
12 清空数组
13 序列化和反序列化
14 创建子数组
15 克隆
16 创建迭代器
17 创建list Iterator迭代器