arraylist 要求:包括add、get、size、indexof、remove方法的实现。
时间: 2023-07-10 09:32:16 浏览: 101
好的,以下是基于Java语言的ArrayList实现,包含了add、get、size、indexof和remove方法:
```java
public class ArrayList<E> {
private static final int DEFAULT_CAPACITY = 10;
private Object[] elementData;
private int size;
public ArrayList() {
elementData = new Object[DEFAULT_CAPACITY];
}
public void add(E e) {
if (size == elementData.length) {
grow();
}
elementData[size++] = e;
}
@SuppressWarnings("unchecked")
public E get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
return (E) elementData[index];
}
public int size() {
return size;
}
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;
}
public boolean remove(Object o) {
int index = indexOf(o);
if (index == -1) {
return false;
}
remove(index);
return true;
}
public E remove(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException();
}
E oldValue = get(index);
int numMoved = size - index - 1;
if (numMoved > 0) {
System.arraycopy(elementData, index + 1, elementData, index, numMoved);
}
elementData[--size] = null;
return oldValue;
}
private void grow() {
int newCapacity = elementData.length * 2;
elementData = Arrays.copyOf(elementData, newCapacity);
}
}
```
在这里,我们使用了一个Object类型的数组来存储元素,然后通过size来表示当前元素的数量。在add方法中,如果当前数组已满,则会调用grow方法来扩容数组;在remove方法中,我们使用了System.arraycopy方法来实现元素的移动操作。其他方法的实现比较简单,可以通过遍历数组来查找元素或者判断下标是否越界。
阅读全文