繁体   English   中英

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

[英]What is the time complexity of the add and element in a Java Array?

您好,我正在对此进行研究,但是在oracle网站上找不到任何内容。

问题是下一个。

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

int[] foo = new int[10];

并且您想要为这种方式的4个位置添加一些值

foor[4] = 4;

这不会移动数组的元素,因此时间复杂度将为O(1),因为如果数组从0x000001开始,并且有10个空格,并且您想将一些放在x位置,则可以通过(x*sizeOf(int))+initialMemoryPosition (这是一个伪代码)

是这样吗,这是这种类型的数组在Java中工作的方式吗,如果它的时间复杂度为O(1)

谢谢

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

最初,数组将使用预定义数量的条目分配一次。 以后无法更改该数字。

换一种说法:

int a[] = new int[5];
a[4] = 5;

没有添加任何东西。 它只是在内存中设置一个值。

因此,如果有的话,我们可以说我们有某种方式可以使用“ O(1)”来访问内存中的地址,因为与数组无关的一切都取决于条目的数量。

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

数组在内存中的某处。 您无法控制位置,也不必在意位置。 使用new type[size]语法时,将初始化数组。

使用[]索引运算符可以访问数组。 它永远不会修改大小或顺序。 如果分配给索引位置,则仅为索引位置。

另请参阅https://www.w3schools.com/java/java_arrays.asp

时间复杂度已被正确注释。 但这是正确使用语法后的关注点。

关于集合的时间复杂性的旧帖子可以在这里找到。

是的,需要O(1)时间。 初始化数组时,可以说int[] foo = new int[10] ,那么它将创建一个新的0数组。 由于int有4个字节(即32位),因此每次将一个值赋给一个元素,即foo [4] = 5时,它将执行foo[32 x input(which is 4)] = value(5); 这就是为什么数组使用0索引的原因,以及它们如何在O(1)时间内分配值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM