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