ArrayList 要求:包括add、get、size、indexOf、remove方法的实现,并在每个功能前注释其实现的逻辑,然后在主方法中调用各个方法
时间: 2023-12-29 10:03:35 浏览: 74
好的,以下是基于 Java 语言实现的 ArrayList 类,包括 add、get、size、indexOf、remove 方法的实现以及在每个功能前的注释说明:
```java
public class ArrayList<T> {
// 初始化数组大小为10
private static final int DEFAULT_CAPACITY = 10;
// 内部存储元素的数组
private Object[] elementData;
// 数组中元素的个数
private int size;
// 无参构造函数,初始化数组大小为10
public ArrayList() {
this.elementData = new Object[DEFAULT_CAPACITY];
this.size = 0;
}
// 有参构造函数,初始化数组大小为 capacity
public ArrayList(int capacity) {
this.elementData = new Object[capacity];
this.size = 0;
}
// 向 ArrayList 中添加元素
public void add(T element) {
// 判断数组是否已满,如果已满,则进行扩容
if (size == elementData.length) {
ensureCapacity(size + 1);
}
elementData[size++] = element;
}
// 获取 ArrayList 中指定下标的元素
public T get(int index) {
// 检查下标是否越界
rangeCheck(index);
return (T) elementData[index];
}
// 获取 ArrayList 中元素的个数
public int size() {
return size;
}
// 获取指定元素在 ArrayList 中的下标
public int indexOf(T element) {
// 遍历数组,找到第一个与指定元素相等的元素
for (int i = 0; i < size; i++) {
if (element.equals(elementData[i])) {
return i;
}
}
return -1;
}
// 从 ArrayList 中删除指定元素
public void remove(T element) {
int index = indexOf(element);
if (index >= 0) {
remove(index);
}
}
// 从 ArrayList 中删除指定下标的元素
public void remove(int index) {
// 检查下标是否越界
rangeCheck(index);
// 将该元素后面的所有元素向前移动一个位置
int numMoved = size - index - 1;
if (numMoved > 0) {
System.arraycopy(elementData, index + 1, elementData, index, numMoved);
}
// 将最后一个元素置为 null,并将 size 减1
elementData[--size] = null;
}
// 扩容数组
private void ensureCapacity(int minCapacity) {
if (minCapacity > elementData.length) {
Object[] newElementData = new Object[newCapacity(minCapacity)];
System.arraycopy(elementData, 0, newElementData, 0, size);
elementData = newElementData;
}
}
// 计算新的数组大小
private int newCapacity(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity < minCapacity) {
newCapacity = minCapacity;
}
if (newCapacity > Integer.MAX_VALUE - 8) {
newCapacity = Integer.MAX_VALUE - 8;
}
return newCapacity;
}
// 检查下标是否越界
private void rangeCheck(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
}
// 测试 ArrayList 类的各个方法
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
System.out.println("size: " + list.size()); // 打印输出:size: 3
System.out.println("element at index 1: " + list.get(1)); // 打印输出:element at index 1: Python
System.out.println("index of element \"Java\": " + list.indexOf("Java")); // 打印输出:index of element "Java": 0
list.remove(1);
System.out.println("size after remove: " + list.size()); // 打印输出:size after remove: 2
}
}
```
在上述代码中,我们使用泛型来实现 ArrayList 类,可以添加任意类型的元素。在主方法中,我们创建了一个 ArrayList 对象,向其中添加了三个元素,并调用了各个方法来测试其功能。
阅读全文