當前位置:編程學習大全網 - 源碼下載 - 為什麽學習集合關系

為什麽學習集合關系

集合可以說是學習 Java 中最重要的壹塊知識點了,無論做任何業務系統,集合總是最為基礎的那塊 API。我第壹次接觸集合,是在我大三的時候,那時候去面試,面試官問我:妳了解過集合嗎?可惜那時候沒什麽項目經驗,所以基本沒有了解過,因此也錯失了機會。

到了現在,我已經工作了5年了,也做過了大大小小十幾個項目。這些項目中有簡單的 SSH 項目,也有分布式高並發的復雜項目。無論在哪個項目中,關於集合的時候是必不可少的。但我現在慢慢回顧過去做的項目,我發現自己使用到的集合還是比較少,基本上只有:ArrayList、HashSet、HashMap 這幾個。

但當我開始深入去了解 JDK 集合的整個體系時,我發現之前的我了解得確實非常淺顯。例如關於 List 的實現有 ArrayList、LinkedList、Vector、Stack 這四種實現,但我們很多時候只是直接使用 ArrayList,而不是根據場景去選擇。

1.學習集合源碼,能夠讓我們使用得更加準確。

當我們深入學習了源碼之後,我們就能夠了解其特性,從而能夠根據我們的使用場景去做出更好的選擇,從而讓我們的代碼運行效率更高。

我們舉壹個最簡單的例子 —— ArrayList 和 LinkedList。它們兩者底層采用了完全不同的實現方式,ArrayList 使用數組實現,而 LinkedList 則使用鏈表實現。這使得 ArrayList 的讀取效率高,而 LinkedList 的讀取效率低。但因為 LinkedList 采用鏈表實現,所以其增加和刪除比較方便,而 ArrayList 則比較麻煩。所以 ArrayList 比較適合用於讀場合較多的情況,而 LinkedList 比較適合用於增加、刪除較多的場景。

我們來看另外壹個例子 —— HashMap 和 TreeMap。乍看之下,他們都是 Map 集合的實現,但是它們內部有著截然不同的實現。HashMap 是 Map 接口的哈希實現,其內部使用了鏈表和紅黑樹實現。而 TreeMap 是 Map 接口的有序實現,其內部使用了紅黑樹實現。所以 HashMap 壹般用來存儲 key、value 的實現,而 TreeMap 常用存儲需要排序的元素。

除了我們舉的這兩個例子之外,還有許多這樣的例子,比如:HashMap 與 LinkedHashMap 的區別,HashMap 與 WeakHashMap 的區別,LinkedList 與 ArrayDeque 的區別。

2.學習集合源碼,讓我們學習經典的設計方式。

在集合的整個架構設計中,其類繼承體系非常簡單,但是卻很經典。例如:Collection 接口設計了集合通用的操作,每個集合類型都有對應的接口(List、Set、Map),每個集合類型都有對應的抽象實現(AbstractList、AbstractSet、AbstractMap)等。

當我們閱讀這些源碼的時候,這種設計方式都會潛移默化地影響我們。當我們之後自己設計壹個框架的時候,我們就會不知不覺地用上去。所有的創新都是從模仿開始的,所以閱讀優秀的集合源碼很重要。

3.幫助通過面試,獲得更高的薪酬。

現在關於集合的原理是 Java 工程師面試的家常菜,幾乎每壹個企業的面試都會問到。如果妳連這塊東西都沒搞清楚,那麽妳就不需要聊其他了,直接被幹掉。而如果妳能將整個 Java 集合體系清晰地說出去,並且舉壹反三地對比,那麽妳就比其他人優秀了。

4.學習經典的數據結構。

還記得大學在學習數據結構的時候,我們都是從理論上去記憶。但是當我看完集合源碼之後,我忽然發現——JDK集合源碼簡直就是數據結構的最佳實踐呀!

數據結構中最為基礎的幾個結構為:順序表、單鏈表、雙向鏈表、隊列、棧、二叉堆、紅黑樹、哈希表。這些所有的實現都能在 JDK 集合的實現中找到。例如:ArrayList 就是順序表的實現,LinkedList 就是雙向鏈表的實現,Stack 就是棧的實現,HashMap 就是哈希表的實現,TreeMap 就是紅黑樹的實現,PriorityQueue 就是二叉堆的實現。

5.所有技術的基礎

集合源碼可以說是 JDK 所有源碼中最為簡單的壹塊了,而且也是其他所有源碼的基礎。例如線程池的源碼中也大量使用了阻塞隊列,如果妳連集合源碼都搞不懂,那麽線程池的源碼妳也肯定看不懂的。而如果線程池源碼看不懂,那麽妳 netty 的源碼也看不懂的。netty 源碼看不懂,那麽 dubbo 的源碼也是看不懂的。

看明白了麽?這些技術都是壹換扣著壹換的。如果妳想要後續學習更加快速,那麽妳就必須把最基礎的東西學明白了。如果連最基礎的東西都沒學明白,就直接去學其他更復雜的東西,最後只會越來越難,最終逃脫不了放棄的命運。

讀到了這裏,我相信妳也對集合的重要性有了不壹樣的認識。那麽接下來壹段時間,就讓我和妳壹起來深入學學集合源碼吧。如果覺得讀了有用,那麽請給我壹個贊吧。妳們的贊是我繼續寫下去的動力!

  • 上一篇:孫子文吊亡妻文言文翻譯
  • 下一篇:什麽是VOLUME指標?
  • copyright 2024編程學習大全網