這樣規範寫代碼,同事直呼「666」

Tips:關注公衆號:松花皮蛋的黑板報,領取程序員月薪25K+祕籍,進軍BAT必備!
程序員

1、迭代entrySet() 獲取Map 的key 和value

當循環中只須要獲取Map 的主鍵key時,迭代keySet() 是正確的;可是,當須要主鍵key 和取值value 時,迭代entrySet() 纔是更高效的作法,其比先迭代keySet() 後再去經過get 取值性能更佳。正則表達式

反例:數組


正例:微信


2、使用Collection.isEmpty() 檢測空

使用Collection.size() 來檢測是否爲空在邏輯上沒有問題,可是使用Collection.isEmpty() 使得代碼更易讀,而且能夠得到更好的性能;除此以外,任何Collection.isEmpty() 實現的時間複雜度都是O(1) ,不須要屢次循環遍歷,可是某些經過Collection.size() 方法實現的時間複雜度多是O(n)函數

反例:工具


正例:性能


3、初始化集合時儘可能指定其大小

儘可能在初始化時指定集合的大小,能有效減小集合的擴容次數,由於集合每次擴容的時間複雜度極可能時O(n),耗費時間和性能。優化

反例:ui


正例:3d


4、使用StringBuilder 拼接字符串

通常的字符串拼接在編譯期Java 會對其進行優化,可是在循環中字符串的拼接Java 編譯期沒法執行優化,因此須要使用StringBuilder 進行替換。

反例:


正例:


5、若需頻繁調用Collection.contains 方法則使用Set

在Java 集合類庫中,List的contains 方法廣泛時間複雜度爲O(n),若代碼中須要頻繁調用contains 方法查找數據則先將集合list 轉換成HashSet 實現,將O(n) 的時間複雜度將爲O(1)。

反例:


正例:


6、使用靜態代碼塊實現賦值靜態成員變量

對於集合類型的靜態成員變量,應該使用靜態代碼塊賦值,而不是使用集合實現來賦值。

反例:


正例:


7、刪除未使用的局部變量、方法參數、私有方法、字段和多餘的括號。

9、工具類中屏蔽構造函數

工具類是一堆靜態字段和函數的集合,其不該該被實例化;可是,Java 爲每一個沒有明肯定義構造函數的類添加了一個隱式公有構造函數,爲了不沒必要要的實例化,應該顯式定義私有構造函數來屏蔽這個隱式公有構造函數。

反例:


正例:


10、刪除多餘的異常捕獲並跑出

用catch 語句捕獲異常後,若什麼也不進行處理,就只是讓異常從新拋出,這跟不捕獲異常的效果同樣,能夠刪除這塊代碼或添加別的處理。

反例:


正例:


11、字符串轉化使用String.valueOf(value) 代替 " " + value

把其它對象或類型轉化爲字符串時,使用String.valueOf(value) 比 ""+value 的效率更高。

反例:


正例:


12、避免使用BigDecimal(double)

BigDecimal(double) 存在精度損失風險,在精確計算或值比較的場景中可能會致使業務邏輯異常。

反例:


正例:


十3、返回空數組和集合而非 null

若程序運行返回null,須要調用方強制檢測null,不然就會拋出空指針異常;返回空數組或空集合,有效地避免了調用方由於未檢測null 而拋出空指針異常的狀況,還能夠刪除調用方檢測null 的語句使代碼更簡潔。

反例:


正例:


十4、優先使用常量或肯定值調用equals 方法

對象的equals 方法容易拋空指針異常,應使用常量或肯定有值的對象來調用equals 方法。

反例:


正例:


十5、枚舉的屬性字段必須是私有且不可變

枚舉一般被當作常量使用,若是枚舉中存在公共屬性字段或設置字段方法,那麼這些枚舉常量的屬性很容易被修改;理想狀況下,枚舉中的屬性字段是私有的,並在私有構造函數中賦值,沒有對應的Setter 方法,最好加上final 修飾符。

反例:


正例:


十6、tring.split(String regex)部分關鍵字須要轉譯

使用字符串String 的plit 方法時,傳入的分隔字符串是正則表達式,則部分關鍵字(好比 .[]()| 等)須要轉義。

反例:


正例:


文章來源:www.liangsonghua.me

關注微信公衆號:松花皮蛋的黑板報,獲取更多精彩!

公衆號介紹:分享在京東工做的技術感悟,還有JAVA技術和業內最佳實踐,大部分都是務實的、能看懂的、可復現的

相關文章
相關標籤/搜索