LinkedList作者说他自己都不用LinkedList?看完给我整不会了。。
今天在網(wǎng)上沖浪,就看到有文章寫說 LinkedList 的作者說他自己都不用 LinkedList,感覺既驚訝,又有點意思。
可能這就是大佬吧,我造輪子,但是我不用!或者這就是傳說中的廚子不吃自己做的菜?
不扯了,言歸正傳。其實我個人覺得大佬說好像是事實,因為在業(yè)務(wù)上好像都用不到 LinkedList ,大多數(shù)場景下都是用 ArrayList 比較合適,我細(xì)數(shù)了下自己平日里的使用情況,真的都是 ArrayList 。
說到這,可能有人不同意了,說我可是看過面試題的,LinkedList 可是有它的優(yōu)勢的!
這題我也看過,沒記錯的話應(yīng)該是:說說 ArrayList 和 LinkedList 的之間區(qū)別?
我覺得這題可謂之為“八股文前三甲”,其實這題映射過來也就是關(guān)于數(shù)組與鏈表的比較。
只要你在網(wǎng)上看過這道面試題,你看到的答案必然是:
數(shù)組的隨機訪問快,插入和刪除慢
鏈表的插入刪除快,隨機訪問慢
頻繁增刪的情況下,用鏈表比較合適
在隨機查找多的情況下,用數(shù)組比較合適
問題就出在鏈表的頻繁增刪這一點。如果單從增加查這三個方法的時間復(fù)雜度來看,確實如此,沒有錯。
但是,在平時的使用上來說,這個說法就完全不成立!你想想,如果你要在鏈表中刪除某個元素,你首先得找到它啊!這個鏈表的查找可耗時的呀!
所以在實際使用的時候,如果你有頻繁的增刪,也不應(yīng)該用鏈表。
不信?我們來做個實驗看看咯。
public?class?YesArrayLinkedBattle?{private?static?final?int?COUNT?=?100000;static?List<Integer>?fillList(List<Integer>?list)?{for?(int?i?=?0;?i?<?COUNT;?i++)?{list.add(i);?//將list填滿,假裝我們在數(shù)據(jù)庫里得到這么多數(shù)據(jù)}return?list;}static?void?randomAdd(List<Integer>?list,?String?listType)?{long?t1?=?System.currentTimeMillis();for?(int?i?=?0;?i?<?COUNT;?i++)?{list.add(ThreadLocalRandom.current().nextInt(0,COUNT),?i);}long?t2?=?System.currentTimeMillis();System.out.println(listType?+"隨機位置插入"?+?COUNT?+?"次耗時:"?+?(t2-t1));}public?static?void?main(String[]?args)?{randomAdd(fillList(new?ArrayList<>(COUNT)),?"數(shù)組");randomAdd(fillList(new?LinkedList<>()),?"鏈表");} }這個實驗很粗暴簡單,但也很直觀,分別對被填滿數(shù)據(jù)的 ArrayList 和 LinkedList 執(zhí)行 10 萬次隨機的插入操作,然后分別統(tǒng)計耗時。
執(zhí)行結(jié)果如下:
是吧,在隨機插入的情況下,鏈表不占優(yōu)勢反而大弱于數(shù)組!
所以說對于鏈表的插入操作,不能只關(guān)注其插入的時間復(fù)雜度,也要算上查找到前節(jié)點的開銷,因此不能武斷地說:頻繁增刪的情況下,用鏈表比較合適
當(dāng)然,如果數(shù)據(jù)量很小的話,其實兩者都是差不多的,比如長度都為 100 ,執(zhí)行 100 次,則耗時如下:
長度都為 1000 ,執(zhí)行 1000 次,則耗時如下:
所以,在數(shù)據(jù)量不大且操作次數(shù)不多的情況其實不必過于糾結(jié)到底用哪個。但在數(shù)據(jù)量較大且對時延敏感的情況下,建議還是做好測試,不能平白的根據(jù)一些“網(wǎng)上結(jié)論”而下定論。
技術(shù)交流群
最近有很多人問,有沒有讀者交流群,想知道怎么加入。
最近我創(chuàng)建了一些群,大家可以加入。交流群都是免費的,只需要大家加入之后不要隨便發(fā)廣告,多多交流技術(shù)就好了。
目前創(chuàng)建了多個交流群,全國交流群、北上廣杭深等各地區(qū)交流群、面試交流群、資源共享群等。
有興趣入群的同學(xué),可長按掃描下方二維碼,一定要備注:全國 Or 城市 Or 面試 Or 資源,根據(jù)格式備注,可更快被通過且邀請進群。
▲長按掃描
往期推薦我被開除了。。只因為看了罵公司的帖子
一位阿里P9的年薪和家庭資產(chǎn)
我的新書終于寫完了。
如果你喜歡本文,
請長按二維碼,關(guān)注?Hollis.
轉(zhuǎn)發(fā)至朋友圈,是對我最大的支持。
點個?在看?
喜歡是一種感覺
在看是一種支持
↘↘↘
總結(jié)
以上是生活随笔為你收集整理的LinkedList作者说他自己都不用LinkedList?看完给我整不会了。。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实战!阿里神器 Seata 实现 TCC
- 下一篇: 官方确认:新增一所“双一流”大学