Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java array.length的运行时间是多少?_Java - Fatal编程技术网

Java array.length的运行时间是多少?

Java array.length的运行时间是多少?,java,Java,假设我有一个数组: int[] array = new int[10]; 什么是运行时: int len = array.length; 我认为这将是一个固定的时间操作,但今天在一次采访中,采访者告诉我这将是O(n),因为需要计算元素的数量 另外,如果我有这样一个循环: for (int i = array.length - 1; i >=0; i--) { something with array[i]; } 这是否需要额外的n操作才能到达数组末尾以启动循环?采访者来自C语

假设我有一个数组:

int[] array = new int[10];
什么是运行时:

int len = array.length;
我认为这将是一个固定的时间操作,但今天在一次采访中,采访者告诉我这将是
O(n)
,因为需要计算元素的数量

另外,如果我有这样一个循环:

for (int i = array.length - 1; i >=0; i--) {
    something with array[i];
}

这是否需要额外的
n
操作才能到达数组末尾以启动循环?采访者来自C语言背景,所以他们可能对Java的工作原理有误解,但我不想在采访中强调它。

数组。长度
为O(1),循环整体为O(n)(假设“某物”是常数时间)

c有什么不同吗

C的不同之处在于,根据数组的分配方式,您可以在
O(1)
时间中找到它的大小,也可以根本不找到。我说的“一点也不”是指你必须自己记录尺码


(就我个人而言,如果这是面试官的能力,我会对去那里工作有所保留。)

下面是另一个SO线程,它解释了array.length的实现:

调用length属性是一个O(1)操作,因为它实际上不计算数组,所以该字段在创建数组时设置


另一方面,您的循环是一个O(n)操作。

在所有JAVA实现中,它都是一个常量时间操作,因为JVM必须存储此字段以检查索引(如果索引无效,它必须抛出IndexOutOfBoundsException)


在局部变量中缓存数组长度可能是一个好主意,因为JVM堆栈访问速度更快,但这种改进非常小,通常循环体执行会加重这种优化

它是O(1),因为这个元数据被保存到数组对象中。@alfasin是的,我就是这么想的。c语言与之不同吗?不,所有语言都是一样的。尽管以下链接特定于IBM版本的JVM,但它可以让您基本了解数组在内存中的表示方式:采访者可能想到了以null结尾的“c字符串”。但是,不,在Java中,获取字符串列表不是O(n)(字符串和集合也是如此)。同意您的个人说明,但有时您确实需要一份工作。