Java数组中add和元素的时间复杂度是多少?

Java数组中add和元素的时间复杂度是多少?,java,time-complexity,Java,Time Complexity,你好,我正在对此进行研究,但我在oracle网站上找不到任何东西 问题是下一个 如果您使用的是这样的静态数组 int[] foo = new int[10]; 你想通过这种方式给4个位置增加一些价值 foor[4] = 4; 这不会移动数组的元素,因此时间复杂度将为O1,因为如果数组从0x000001开始,有10个空格,并且希望在x位置放置一些空格,则可以通过x*sizeOfint+initialMemoryPosition访问,这是一个伪代码 这是正确的吗?这是java中这种类型的数组的工

你好,我正在对此进行研究,但我在oracle网站上找不到任何东西

问题是下一个

如果您使用的是这样的静态数组

int[] foo = new int[10];
你想通过这种方式给4个位置增加一些价值

foor[4] = 4;
这不会移动数组的元素,因此时间复杂度将为O1,因为如果数组从0x000001开始,有10个空格,并且希望在x位置放置一些空格,则可以通过x*sizeOfint+initialMemoryPosition访问,这是一个伪代码

这是正确的吗?这是java中这种类型的数组的工作方式吗?如果它的时间复杂度为O1


谢谢

内存中有一个数组。你无法控制它在哪里,你不应该在意它在哪里。当使用新的类型[size]语法时,数组被初始化

使用[]索引运算符访问数组。它永远不会修改大小或顺序。如果指定给索引位置,则只显示它

另见

时间复杂性已经得到了正确的评价。但这正是语法正确后需要考虑的问题


可以找到一篇关于集合时间复杂性的老文章。

这个问题是基于一个误解:在Java中,不能向数组添加元素

最初,一个数组只分配一次预定义的条目数。以后不可能更改该数字

换言之:

int a[] = new int[5];
a[4] = 5;
没有添加任何内容。它只是在内存中设置一个值

所以,如果有的话,我们可以说我们在某种程度上有O1来访问内存中的地址,因为与数组相关的东西都不取决于条目的数量


注意:如果您询问ArrayList,情况会有所不同,因为此处添加到数组末尾可能会导致创建新的、更大的底层数组,并移动数据。

是的,这需要1次。初始化数组时,比如int[]foo=newint[10],
然后它将创建一个0的新数组。由于int有4个字节,即32位,因此每次为一个元素分配一个值,即foo[4]=5,它将执行foo[32 x input,即4]=value5;这就是为什么数组是0索引的,以及它们是如何在O1时间内赋值的。

您不需要向数组添加元素,只需要设置一个值。它是O1.OK,但是在创建数组时,是相同的对吗?数组创建是打开的,因为数组元素被初始化为默认值。