java模拟ArrayList类要求能够操作任何类型的对象。
下面是一个使用Java模拟ArrayList类的示例,可以操作任何类型的对象:
public class MyArrayList<T> {
private Object[] elements;
private int size;
private static final int DEFAULT_CAPACITY = 10;
public MyArrayList() {
this.elements = new Object[DEFAULT_CAPACITY];
this.size = 0;
}
public void add(T element) {
if (size == elements.length) {
expandCapacity();
}
elements[size++] = element;
}
public T get(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
return (T) elements[index];
}
public void remove(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
}
for (int i = index; i < size - 1; i++) {
elements[i] = elements[i + 1];
}
elements[--size] = null;
}
public int size() {
return size;
}
private void expandCapacity() {
int newCapacity = elements.length * 2;
Object[] newElements = new Object[newCapacity];
System.arraycopy(elements, 0, newElements, 0, size);
elements = newElements;
}
}
这个示例中的MyArrayList类使用泛型<T>来支持操作任何类型的对象。elements数组用于存储元素,size变量用于记录当前元素个数。在构造函数中,初始化elements数组为默认容量10,size为0。
add方法用于向列表中添加元素。如果当前元素个数达到数组容量上限,会调用expandCapacity方法进行扩容。然后将新元素添加到数组的末尾。
get方法用于获取指定索引位置的元素。如果索引超出范围,会抛出IndexOutOfBoundsException异常。
remove方法用于移除指定索引位置的元素。如果索引超出范围,会抛出IndexOutOfBoundsException异常。移除元素后,将后面的元素向前移动一个位置,并将最后一个元素置为null。
size方法用于返回当前列表中的元素个数。
expandCapacity方法用于数组扩容。将当前数组的元素复制到新的数组中,新数组的容量是原数组容量的两倍
原文地址: https://www.cveoy.top/t/topic/ikAh 著作权归作者所有。请勿转载和采集!