侯捷老師剖析了很多Framework,如MFC,STL等。侯老師有句名言:html
源碼面前,了無祕密java
這句話還在知乎引發普遍討論。git
我對教授程序設計的一點想法是:程序員
同窗們開始不會編程,最好的學習方式是讀教材,敲代碼,我還專門寫了一篇博客指導同窗們敲代碼:《積極主動敲代碼,使用Junit學習Java程序設計》,我認爲閱讀經典圖書,積極主動敲5000行左右的代碼,應該能解決語言基本語法的問題,基本程序設計的問題,基本工具(git,jdb,junit,idea...)的使用問題web
而後同窗們應該獨立編寫5000行左右的代碼,解決程序邏輯錯誤的調試,模塊分解,數據結構與選用,問題解決的通常過程等相關問題算法
有了10000行代碼的基礎,後面的學習提升要依靠代碼閱讀了,好比JUnit的源碼,JHotdraw的源碼,Java Collection API的源碼,Java JCE的源碼等編程
教學中也是想經過這三個步驟進行訓練。api
咱們這學期主要講數據結構,但願同窗們在學習時能分析一下Java Collection的源代碼。數據結構
我開玩笑地對朋友說,這本書出版,給大學課程中的「數據結構」和「算法」兩門授課老師出了個難題。幾乎全部可能的做業題目(複雜度證實題除外),本書都有了詳盡的解答。然而,若是學生可以從龐大的 SGI STL 源碼中乾淨抽出某一部份,加上本身的包裝,作爲呈堂做業,也足以證實你有資格得到學分和高分。事實上,追蹤一流做品並於其中吸收養份,遠比本身關起門來寫個三流做品,價值高得多 — 個人確認爲99.99 % 的程序員所寫的程序,在 SGI STL 面前都是三流水準。
我相信絕大多數程序員用Java實現的數據結構和算法,至關於Java Collection API也是三流水準,但願同窗們經過代碼分析學習一流代碼的實現方法,技巧等。
源碼以前了無祕密,你將看到vector的實現、list的實現、heap的實現、deque的實現、RB-tree的實現、hash-table的實現、set/map 的實現;你將看到各類算法(排序、搜尋、排列組合、數據移動與複製…)的實現;你甚至將看到底層的memory pool 和高階抽象的traits 機制的實現。那些數據結構、那些算法、那些重要觀念、那些編程實務中最重要最根本的珍寶,那些蜇伏已久似乎已經還給老師的記憶,將從新在你的腦中閃閃發光。
我但願同窗們在分析Java Collection API源碼時有相同的收穫。
代碼閱讀和分析同窗們能夠重點參考一下侯捷老師的上窮碧落下黃泉-源碼追蹤經驗談,文章要點是:
你們也能夠參考:
安裝JDK時,選中「源代碼":
安裝完就會出一個src.zip
的文件,解壓了就包含Java Collections API的源碼:
這些代碼在java.util
包中:
版權聲明:自由轉載-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0
若是你以爲本文對你有幫助,請點一下左下角的「好文要頂」和「收藏該文」