2 回答

qq_汪奇_0
TA貢獻2條經驗 獲得超1個贊
我今天也被問到了這個問題。面試官給我的答案是用多線程將List分段并行處理。java1.8中可以通過
list.parallelStream()獲取并行流

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
Java8 的 Stream
可以并發執行,但 Stream
不會改變原有的 list,只能返回一個新的 list,然后賦值給原來 list 的引用。但是如果 list 是 RandomAccess
的,即底層實現為數組,比如 ArrayList
,那么直接使用傳統的 for 循環遍歷一遍就好,因為對于 RandomAccess
的 List
,通過下標訪問數組元素的時間復雜度為 O(1),那么遍歷一遍的時間復雜度為 O(N),這是一個很優的時間復雜度,而且沒有使用額外的空間,空間復雜度為 O(1);
如果不是,比如 LinkedList
,那么通過下標獲得 list 中對應元素的時間復雜度是 O(N),如果使用之前的方式,那么總的時間復雜度會是 O(N^2),那么推薦創建一個同樣大小新的 List
,然后遍歷原有的 list,把 每個元素+1 的值加入到新的 List
中。這個時候時間復雜度是 O(N),空間復雜度也是 O(N)。(當然此時你也可以使用 Stream
來生成一個新的 List
)
所以我猜測面試官對你的回答不滿意,是因為你沒有考慮到不同的 List 類型吧。
添加回答
舉報
0/150
提交
取消