是否必须计算数组中的每个元素?因此,不是恒定数量的操作,所以O(n)?
答案 0 :(得分:4)
不,Java数组具有length
属性,可存储其长度(即每个数组都知道自己的长度)。不需要计算。
答案 1 :(得分:0)
考虑一下您是否正在编写编程语言,并且必须实现数组类型。你会怎么做?
显然,您需要知道存储阵列所需的内存量。因此,您可能希望以某种方式跟踪它。
因此,在具有数组的所有语言中,数组中的元素数也存储为数组的一部分。知道数组的长度只不过是查看长度值,即O(1)操作。
C和C ++很特别。
它们处理具有接近相同语法的指针和数组。这意味着如果将实际数组视为指针,则丢失大小信息。
但即使你不这样做,也可以方便地存储字符串等长度不同的字符串。标记字符串结尾的旧C风格方式是使用零值的字符 null character 。
因此,要找到C字符串的结尾,无论包含它的数组有多大,都必须计算所有字符,直到找到值为零的字符,即O(n)操作。 / p>
这与不知道包含数组的长度不一样。
在处理C字符串时,可能是,并且通常在处理字符串数组时,不会知道包含字符串的数组的大小,因为已经提到的问题,即数组退化为指针很容易。
所以回答你的问题,这取决于你对“数组”的意思。如果您正在谈论一些开放序列,例如字符设备或管道,那么是的,您必须有某种方法来确定何时遇到最后一个元素。但是对于正确的数组,那么不,数组的大小是其类型的组成部分。
答案 2 :(得分:0)
嗯..?你是C开发人员吗?
int[] arr = new int[500];
System.out.println(arr.length); //Prints 500