第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.addint indexE 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迭代器

posted @ 2023-04-22 17:27  cnetsa  阅读(9)  评论(0编辑  收藏  举报