開發與維運

學習開發手冊的三個階段:閱讀、實操與理解之再讀《Java開發手冊》

從《Java開發手冊》面世以來,從最開始的版本到現在的泰山版,每一個版本我都學習過。如果說要我從中總結出一些經驗來,那麼我對《Java開發手冊》的學習分成了三個階段:閱讀、實操與理解。

一、閱讀階段

所謂的閱讀階段,在我看來就是之前從沒遇到過、也從未了解過的規約,通過《Java開發手冊》的閱讀瞭解到相關知識,之後在項目中遇到了,再返回來閱讀,以避免開發中可能存在的問題。比如編碼規則中關於併發處理處理的這部分規則,在項目開發中我還未曾真正使用到併發和線程。那麼我在看併發處理這部分規則時,我只是能大致閱讀,知道有這部分規約的存在。以後項目中如果有用到併發和線程時,我再回過頭來再次閱讀這部分規約,以避免開發中可能存在的問題。

二、實操階段

所謂的實操階段,也就是在閱讀規約之後,在項目中確實遇到規約中的問題,運用規約中的知識進行項目開發的過程。舉例來說,在編程規約集合處理中有這麼一條

【推薦】集合初始化時,指定集合初始值大小。 說明:HashMap使用HashMap(int initialCapacity) 初始化,如果暫時無法確定集合大小,那麼指定默認值(16)即可。

看到這條規約之後,在之後的項目開發中就不自覺的會在新建 Map 對象時加上初始化大小。例如:

Map<String, Object> resultMap = new HashMap<>(8);

到了這一步,閱讀《Java開發手冊》也就開始出現成效了。

三、理解階段

所謂的理解階段,就是在實操之後,再次閱讀《Java開發手冊》時,發現原先的代碼與現在的理解有出路,甚至是發現原先的理解是錯誤的。回到實操階段的例子,沒有再次閱讀規約的時候,我覺得給新建 Map 對象進行初始化大小是沒錯的。於是當我有四個元素需要放在 Map 對象中時,我是這麼創建 Map 對象的。

Map<String, Object> resultMap = new HashMap<>(4);

即,Map 初始化大小就是元素的個數。

而當我這次回過頭來重新閱讀規約時,我注意到了負載因子這四個字。規約上是這麼寫的:

正例:initialCapacity = (需要存儲的元素個數 / 負載因子) + 1。注意負載因子(即loader factor)默認為0.75,如果暫時無法確定初始值大小,請設置為16(即默認值)。

所謂負載因子就是當容量到達一個數值之後,容量就開始擴大。比如,設置初始化大小為8,負載因子為0.75,0.75 * 8 = 6,那麼當容量到達6的時候,容量就會開始擴大,而不是元素數量到達8的時候才進行擴大。理解負載因子之後,我發現當初設置初始化大小的時候出現了錯誤,應該設置更大一些。舉個例子,默認負載因子為0.75,Map 中需要放置的元素個數為 4,那麼需要設置 Map 的初始化大小為 5.33。之前看過《碼出高效》,建議初始化大小的數值為2的倍數,即此次初始化大小應該為 8。

總結:我認為從閱讀到實操再到理解是一個過程,是一個從學習到成長的過程。只要勇於邁出第一步,接下來就會有驚喜和收穫。

Leave a Reply

Your email address will not be published. Required fields are marked *