亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

面試題:一個存有10000個數的list對list中的每一個數+1.如何實現

面試題:一個存有10000個數的list對list中的每一個數+1.如何實現

繁花不似錦 2018-08-01 09:21:47
我當時回答的是使用java8的stream類中的map函數+1.但是看面試官的反應讓我確信這不是正確答案。各位會怎么做
查看完整描述

2 回答

?
qq_汪奇_0

TA貢獻2條經驗 獲得超1個贊

我今天也被問到了這個問題。面試官給我的答案是用多線程將List分段并行處理。java1.8中可以通過

list.parallelStream()獲取并行流


查看完整回答
反對 回復 2021-04-07
?
鴻蒙傳說

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 類型吧。


查看完整回答
反對 回復 2018-08-05
  • 2 回答
  • 0 關注
  • 1812 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號