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