什么';Java中用于ArrayList的add()方法背后的算法是什么?

什么';Java中用于ArrayList的add()方法背后的算法是什么?,java,algorithm,arraylist,add,Java,Algorithm,Arraylist,Add,所以我有点创造性,想在Java中重新创建一些方法,我被add()卡住了 我的想法是先检查我们是否需要更多尺寸,然后再添加(如果需要) 在这之后,复制初始数组,然后移动数组中的索引和数字,但坦率地说,我不知道如何做,所以这就是我在这里提问的原因。逻辑如下: public boolean add(E e) { ensureCapacity(size + 1); // Increments modCount!! elementData[size++] = e; return

所以我有点创造性,想在Java中重新创建一些方法,我被
add()
卡住了

我的想法是先检查我们是否需要更多尺寸,然后再添加(如果需要)


在这之后,复制初始数组,然后移动数组中的索引和数字,但坦率地说,我不知道如何做,所以这就是我在这里提问的原因。

逻辑如下:

public boolean add(E e) {
    ensureCapacity(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

您可以看到java源代码的漏洞

逻辑如下:

public boolean add(E e) {
    ensureCapacity(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

您可以看到java源代码的漏洞

为什么会有移位?如果使用javap,您可以对字节码进行反向工程:
javap-vjava.util.ArrayList
。这可能有助于你了解它在封面下做什么。或者你可以只看一眼。@harold,这不符合逻辑吗?如果我只是在某个索引中添加一些元素,而不移动其余的元素,我只会覆盖当前元素,或者至少我这么认为。@brajevicm well。。大概但是,您可以只更改索引,而不移动内容。为什么会发生移动?如果使用javap,您可以对字节码进行反向工程:
javap-vjava.util.ArrayList
。这可能有助于你了解它在封面下做什么。或者你可以只看一眼。@harold,这不符合逻辑吗?如果我只是在某个索引中添加一些元素,而不移动其余的元素,我只会覆盖当前元素,或者至少我这么认为。@brajevicm well。。大概不过,你可以只更改索引,而不必经常更改内容,这正是我所需要的。非常感谢,这正是我所需要的。