我正在编写自己的数组列表。这是相同的删除方法,

public E remove(int index){
        E value =(E) elementData[index];
        for(int i=index;i<size-1;i++){
            elementData[i]=elementData[i+1];
        }
        elementData[size-1]=null;
        return value;
    }

现在我将执行一些删除操作
        Box<Integer> list = new Box<>();
        for(int i=1;i<5;i++){
            list.add(i);
        }
        print(list);
        list.remove(1);
        print(list);

现在这将导致以下输出,
1 2 3 4

1 3 4 null

但是当我使用API​​中的ArrayList时,我将获得以下输出:
1234

134

我想念什么吗?有人可以向我解释我哪里出错了。

最佳答案

我想您需要在size操作之后更新remove():

public E remove(int index){
    E value =(E) elementData[index];
    for(int i=index;i<size-1;i++){
        elementData[i]=elementData[i+1];
    }
    elementData[size-1]=null;
    --size;  // Decrement size
    return value;
}

您还需要确保indexelementData数组的范围内。

10-06 13:52