在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  C/ 面試題:一個(gè)存有10000個(gè)數(shù)的list對(duì)list中的每一個(gè)數(shù)+1.如何實(shí)現(xiàn)

面試題:一個(gè)存有10000個(gè)數(shù)的list對(duì)list中的每一個(gè)數(shù)+1.如何實(shí)現(xiàn)

我當(dāng)時(shí)回答的是使用java8的stream類中的map函數(shù)+1.
但是看面試官的反應(yīng)讓我確信這不是正確答案。各位會(huì)怎么做

回答
編輯回答
尛曖昧

Java8 的 Stream 可以并發(fā)執(zhí)行,但 Stream 不會(huì)改變?cè)械?list,只能返回一個(gè)新的 list,然后賦值給原來(lái) list 的引用。但是如果 list 是 RandomAccess 的,即底層實(shí)現(xiàn)為數(shù)組,比如 ArrayList,那么直接使用傳統(tǒng)的 for 循環(huán)遍歷一遍就好,因?yàn)閷?duì)于 RandomAccessList,通過(guò)下標(biāo)訪問(wèn)數(shù)組元素的時(shí)間復(fù)雜度為 O(1),那么遍歷一遍的時(shí)間復(fù)雜度為 O(N),這是一個(gè)很優(yōu)的時(shí)間復(fù)雜度,而且沒(méi)有使用額外的空間,空間復(fù)雜度為 O(1);
如果不是,比如 LinkedList,那么通過(guò)下標(biāo)獲得 list 中對(duì)應(yīng)元素的時(shí)間復(fù)雜度是 O(N),如果使用之前的方式,那么總的時(shí)間復(fù)雜度會(huì)是 O(N^2),那么推薦創(chuàng)建一個(gè)同樣大小新的 List,然后遍歷原有的 list,把 每個(gè)元素+1 的值加入到新的 List 中。這個(gè)時(shí)候時(shí)間復(fù)雜度是 O(N),空間復(fù)雜度也是 O(N)。(當(dāng)然此時(shí)你也可以使用 Stream 來(lái)生成一個(gè)新的 List


所以我猜測(cè)面試官對(duì)你的回答不滿意,是因?yàn)槟銢](méi)有考慮到不同的 List 類型吧。

2018年1月15日 13:37