下面是一个使用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方法用于数组扩容。将当前数组的元素复制到新的数组中,新数组的容量是原数组容量的两倍

java模拟ArrayList类要求能够操作任何类型的对象。

原文地址: https://www.cveoy.top/t/topic/ikAh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录