(1)ArrayList 要求:包括add、get、size、indexOf、remove方法的实现。
时间: 2023-07-10 14:30:02 浏览: 77
好的,下面是 ArrayList 的实现:
```java
import java.util.Arrays;
public class ArrayList<E> {
// 数组默认初始容量
private static final int DEFAULT_CAPACITY = 10;
// 存储元素的数组
private Object[] elements;
// 数组中元素的数量
private int size;
// 构造函数,初始化数组容量为默认值
public ArrayList() {
elements = new Object[DEFAULT_CAPACITY];
}
// 构造函数,初始化数组容量为指定值
public ArrayList(int initialCapacity) {
if (initialCapacity < 0) {
throw new IllegalArgumentException("Illegal Capacity: " + initialCapacity);
}
elements = new Object[initialCapacity];
}
// 添加元素
public boolean add(E element) {
// 如果数组已满,扩容
if (size == elements.length) {
grow();
}
// 添加元素
elements[size++] = element;
return true;
}
// 扩容
private void grow() {
int oldCapacity = elements.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
elements = Arrays.copyOf(elements, newCapacity);
}
// 获取指定位置的元素
public E get(int index) {
checkIndex(index);
return (E) elements[index];
}
// 获取元素在数组中的索引
public int indexOf(Object element) {
if (element == null) {
for (int i = 0; i < size; i++) {
if (elements[i] == null) {
return i;
}
}
} else {
for (int i = 0; i < size; i++) {
if (element.equals(elements[i])) {
return i;
}
}
}
return -1;
}
// 移除指定位置的元素
public E remove(int index) {
checkIndex(index);
E oldValue = (E) elements[index];
int numMoved = size - index - 1;
if (numMoved > 0) {
System.arraycopy(elements, index + 1, elements, index, numMoved);
}
elements[--size] = null;
return oldValue;
}
// 获取数组中元素的数量
public int size() {
return size;
}
// 检查索引是否越界
private void checkIndex(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
}
}
```
以上就是 ArrayList 的实现,包括 add、get、size、indexOf、remove 方法。其中,add 方法可以动态扩容,remove 方法可以删除指定位置的元素并移动数组。
阅读全文