![](/img/trans.png)
[英]Why is list.size()>0 slower than list.isEmpty() in Java?
[英]Why the running time complexity of (List<Object>) list.size() is O(1)?
例如, 在这里 ,ArrayList将存储当前大小以使其立即可用。 其他列表将是相似的,因为这是常见的优化。 (例如LinkedList )
在形成列表时,时间复杂度不是O(1)
。 列表形成后,尺寸将内部保存在列表中。 之后,当我们调用List.size()
它只返回保存的大小,时间复杂度为O(1)
您是在问为什么List.of(1, 2, 3, 4, 5).size()
是O(1) 。
虽然其他答案正确地指出诸如ArrayList
和LinkedList
实现将列表大小显式存储为列表的字段,但实际上并不能回答您的问题,因为List.of(E... elements)
不使用这些实现。
List.of(E... elements)
是List.of(E... elements)
,这意味着在内部它实际上是List.of(E[] elements)
,并且编译器为您构建了一个固定数组。 在您的情况下,该数组的大小恰好为5。
虽然实现真正的不同,建设一个不可变列表中, E[]
变成一个列表类似于如何Arrays.asList(T... a)
这样做,即通过包装阵列中的List
实现,它使用的直接数组。
这样,列表的大小是众所周知的,因为列表的大小就是支持数组的长度 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.