[英]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.