ArrayList 要求:包括add、get、size、indexOf、remove方法的实现。要有注释
时间: 2023-07-10 12:29:41 浏览: 95
好的,以下是一个带有注释的 ArrayList 的实现,包括 add、get、size、indexOf、remove 方法:
```java
public class ArrayList<E> {
private static final int DEFAULT_CAPACITY = 10;
private Object[] elementData; // 存储元素的数组
private int size; // 数组中存储元素的数量
// 默认构造函数,初始化数组容量为 DEFAULT_CAPACITY
public ArrayList() {
elementData = new Object[DEFAULT_CAPACITY];
}
// 添加元素
public void add(E e) {
if (size == elementData.length) { // 如果数组已满,需要扩容
grow();
}
elementData[size++] = e; // 将元素添加到数组末尾,并更新 size
}
// 获取指定位置的元素
@SuppressWarnings("unchecked")
public E get(int index) {
if (index < 0 || index >= size) { // 检查索引是否越界
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
return (E) elementData[index]; // 返回指定位置的元素
}
// 获取数组中存储元素的数量
public int size() {
return size;
}
// 查找指定元素在数组中的位置(从前往后查找)
public int indexOf(Object o) {
for (int i = 0; i < size; i++) {
if (o == null ? elementData[i] == null : o.equals(elementData[i])) {
return i; // 如果找到元素,返回元素在数组中的位置
}
}
return -1; // 如果没找到元素,返回 -1
}
// 删除指定元素
public boolean remove(Object o) {
int index = indexOf(o); // 查找元素在数组中的位置
if (index >= 0) { // 如果找到元素,执行删除操作
remove(index);
return true;
}
return false; // 如果没找到元素,返回 false
}
// 删除指定位置的元素
@SuppressWarnings("unchecked")
public E remove(int index) {
if (index < 0 || index >= size) { // 检查索引是否越界
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
E oldValue = (E) elementData[index]; // 获取要删除的元素
int numMoved = size - index - 1; // 计算要移动的元素数量
if (numMoved > 0) { // 如果要删除的元素不是最后一个元素,需要将后面的元素往前移动
System.arraycopy(elementData, index + 1, elementData, index, numMoved);
}
elementData[--size] = null; // 将数组末尾置为 null,并更新 size
return oldValue; // 返回被删除的元素
}
// 扩容数组,将容量翻倍
private void grow() {
int newCapacity = elementData.length << 1; // 新容量为原容量的两倍
elementData = Arrays.copyOf(elementData, newCapacity); // 扩容数组
}
}
```
以上实现带有详细的注释,可供参考。
阅读全文