【问题标题】:Not clear on documentation of ArrayListArrayList 的文档不清楚
【发布时间】:2025-12-22 12:10:11
【问题描述】:

ArrayList 文档的以下部分对我来说似乎不正确:

size、isEmpty、get、set、iterator 和 listIterator 操作运行 在恒定的时间内。

现在集合定义为:

set(int index, E 元素)
将此列表中指定位置的元素替换为指定元素。

所以这可以用来在 ArrayList 的中间添加一个元素并导致其余元素移动。
但这被认为是线性操作而不是恒定的。

我错了吗?还是我误解了什么?

【问题讨论】:

  • 你在想add(int index, E element)

标签: java list collections arraylist


【解决方案1】:

这是一个集合操作,而不是一个添加。它只是替换数组的第 i 个条目。

【讨论】:

    【解决方案2】:

    ArrayList.set 将替换索引处的元素,而不是插入索引处。就像说:

    array[i] = something;
    

    持续运行。

    【讨论】:

      【解决方案3】:

      所以这可以用来在 ArrayList 的中间添加一个元素并导致其余元素移动。

      不,这种解释是不正确的。操作替换现有元素为不同的元素;它不插入任何东西。

      【讨论】:

        【解决方案4】:

        set(int index, E element) 替换指定位置的元素 与指定元素在此列表中的位置。

        它不会在中间添加新元素,而是覆盖(替换、设置为)元素

        【讨论】:

          【解决方案5】:

          set 替换指定位置的元素。其他值没有变化。旧元素丢失了。

          【讨论】:

            【解决方案6】:

            设置

            公共对象集(int index, 对象元素)用指定元素替换此列表中指定位置的元素(可选 操作)。

            该方法替换索引处的元素并且不移动任何内容,索引处的当前元素将返回给您并且不会再出现在列表中。

            因此,O(1)

            【讨论】: