定义一个泛型类MyArrayList,实现数组列表的基本操作:add、remove、get、size。
时间: 2024-01-31 19:04:19 浏览: 78
下面是一个简单的实现:
```java
public class MyArrayList<E> {
private Object[] elements;
private int size;
private static final int DEFAULT_CAPACITY = 10;
public MyArrayList() {
elements = new Object[DEFAULT_CAPACITY];
size = 0;
}
public void add(E element) {
if (size == elements.length) {
resize();
}
elements[size++] = element;
}
@SuppressWarnings("unchecked")
public E get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
return (E) elements[index];
}
public E remove(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
E element = get(index);
for (int i = index; i < size - 1; i++) {
elements[i] = elements[i + 1];
}
elements[--size] = null; // help gc
return element;
}
public int size() {
return size;
}
private void resize() {
int newCapacity = elements.length * 2;
elements = Arrays.copyOf(elements, newCapacity);
}
}
```
这个类使用了一个Object类型的数组来存储元素,因为Java中的泛型不支持数组。在add方法中,如果数组已经满了,就会调用resize方法来扩大数组的容量。在get方法中,需要将Object类型的元素转换为泛型类型,这里使用了unchecked注解来抑制编译器的警告。在remove方法中,需要将被删除元素后面的元素向前移动一个位置,这里使用了一个for循环来实现。最后,需要将size减1,将最后一个元素赋值为null,以帮助垃圾回收器回收内存。
阅读全文