隨著工作經驗的積累,在代碼編寫和優化方面,個人的心得體會總結以及有些從網上或書本中看到的有用技巧

1. 判斷何時使用keySet()和entrySet() 獲取Map 的key 和value

當循環中只獲取key時,使用keySet()是更正確的做法。而使用entrySet(),當既獲取key,又獲取value時,使用entrySet();或者需要主鍵key去取value時,迭代entrySet()才是更高效的做法。其比先迭代keySet()獲取key後再通過get取值更佳:

反例:

 Map<String, Integer> testMap = new HashMap<>();
testMap.put("a", 1);
for (String keyStr : testMap.keySet()) {
Integer value = testMap.get(keyStr);
}

正例:

 Map<String, Integer> testMap = new HashMap<>();
testMap.put("a", 1);
for (Map.Entry<String, Integer> keyVal : testMap.entrySet()) {
String key = keyVal.getKey();
Integer value = keyVal.getValue();
}

2. 針對代碼中,過多的if ... else ..判斷,如何優化减少if else呢?(非常重要的優化技巧)

具體請看博客:https://www.cnblogs.com/sun-flower1314/p/15097977.html

 3. 初始化集合時盡量指定其大小

這樣可以减少擴容的次數,耗費時間和性能,

反例:

 String[] testArr = new String[]{"a", "b", "c", "d"};
List<String> testList = new ArrayList<>();
for (String str : testArr) {
testList.add(str);
}

正例:

 String[] testArr = new String[]{"a", "b", "c", "d"};
List<String> testList = new ArrayList<>(testArr.length);
for (String str : testArr) {
testList.add(str);
}

4. 字符串拼接優化

字符串在拼接過長中,一般編譯器會將代碼優化,但是在循環中,不會進行優化,所以可以使用StringBuilder進行替換

5.對於未使用的局部變量、字段,要删除

6.工具類中屏蔽掉未使用的構造函數

一般每個類,沒有定義構造方法的情况下,都會有一個隱式的無參構造函數,應該顯示的定義私有構造函數來屏蔽該函數。

7.其他類型轉化為字符串

在將其他其他類型轉化為字符串時,避免使用【"" + val】,而應該采用【String.valueOf(val)】 ,效率更高。

8.避免使用new BigDecimal(double)

在數據精度要求較高或數值比較的情境下,使用new BigDecimal(double)時,存在精度損失導致不正確的情况,應該使用 BigDecimal.valueOf(double)

反例:

 double a = 1.2345611;
BigDecimal bigDecimal = new BigDecimal(a);
System.out.println("new BigDecimal(double) 結果:" + bigDecimal);

控制臺打印:

new BigDecimal(double) 結果:1.234561100000000077869799497420899569988250732421875

正例:

 double b = 1.2345611;
BigDecimal bigDecimal2 = BigDecimal.valueOf(b);
System.out.println("BigDecimal.valueOf(double)結果為:" + bigDecimal2);

控制臺打印:

BigDecimal.valueOf(double)結果為:1.2345611

9.對於集合和數組為空的處理

經常看到代碼中,對於查詢到的數據集為空時,有的返回null,有的返回空。

①返回null有可能會產生問題:若調用方未檢測null,則會拋空指針异常,存在隱藏的問題。

②返回空時,能有效避免因調用方未檢測null而拋出空指針异常的情况,還可以删除調用方檢測null的語句使代碼更簡潔。

反例:

 public static String[] getResultArr() {
return null;
} public static List<String> getResultList() {
return null;
} public static Map<String, Object> getResultMap() {
return null;
}

正例:

 public static String[] getResultArr() {
return new String[0];
} public static List<String> getResultList() {
return Collections.emptyList();
} public static Map<String, Object> getResultMap() {
return Collections.emptyMap();
}

10.優先使用常量或確定值調用equals或其他方法

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

---未完待續,不斷積累中...

Java代碼編寫、代碼優化技巧總結的更多相關文章

  1. Java學習---Java代碼編寫規範

    編碼規範 1 前言為確保系統源程序可讀性,從而增强系統可維護性,java編程人員應具有基本類似的編程風格,茲制定下述Java編程規範,以規範系統Java部分編程.系統繼承的其它資源中的源程序也應按此規 ...

  2. Java代碼編寫規範(轉載)

    編碼規範 1 前言為確保系統源程序可讀性,從而增强系統可維護性,java編程人員應具有基本類似的編程風格,茲制定下述Java編程規範,以規範系統Java部分編程.系統繼承的其它資源中的源程序也應按此規 ...

  3. Java代碼編寫規範(不是標准規範,自行整理,無須糾結)

    最近回過頭來給以前的項目增加功能,發現之前寫的注釋非常不全,代碼也非常的不整潔,有些地方寫的''窩七八爛的,看著很不舒服:又恰好經理最近也經常跟我提起代碼規範,我們就討論了一下代碼規範的重要性和必要性 ...

  4. Java代碼編寫的一般性指導

    (1) 命名規則:這個最基本,也最重要,請牢記. 1,類名首字母應該大寫. 2,字段.方法以及對象(句柄)的首字母應小寫. 3,對於所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字 ...

  5. VS開發中的代碼編寫小技巧&mdash;&mdash;避免重複代碼編寫的幾種方法

    上一篇文章中程序員的幸福生活--有你的日子,每天都是情人節,收到了大家的很多好評.鼓勵和祝福,非常感動,真誠的謝謝大家.也希望每個朋友都能保持一個積極向上的心態,去迎接豐富多彩的人生. 在開發過程中, ...

  6. Java代碼編寫的30條建議

    1) 類名首字母應該大寫.字段.方法以及對象(句柄)的首字母應小寫.對於所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母.例如: ThisIsAClassName thisIsM ...

  7. 大數據之路week07--day03(Hadoop深入理解,JAVA代碼編寫WordCount程序,以及擴展昇級)

    什麼是MapReduce 你想數出一摞牌中有多少張黑桃.直觀方式是一張一張檢查並且數出有多少張是黑桃. MapReduce方法則是: 1.給在座的所有玩家中分配這摞牌 2.讓每個玩家數自己手中的牌有幾 ...

  8. Java 代碼編寫單例模式總結

    手寫一個單例模式是 Java 面試中常見的問題,很多時候我們更偏向於簡單的寫一個餓漢或飽漢模式,深入研究的甚少,這裏列舉三種實現方式,並對各自的優缺進行分析. 1. 餓漢式 public class ...

  9. 高質量JAVA代碼編寫規範

    1. Java 命名約定 除了以下幾個特例之外,命名時應始終采用完整的英文描述符.此外,一般應采用小寫字母,但類名.接口名以及任何非初始單詞的第一個字母要大寫. 1.1 一般概念 * 盡量使用完整的英 ...

  10. java代碼--------編寫0懂啊PI之間求隨機數的方法

    總結:其實每次運行,顯示出來的結果個數是隨機的. package com.mmm; //編寫0到PI之間求隨機數的方法 public class MEm { public static void ma ...

隨機推薦

  1. springboot一個service內組件的加載順序

    先加載自身構造器,所以在構造器中初始化時若使用需要注入的(即@Autowired注解的)組件相關的方法,則會報null: 然後加載注入的組件即@Autowired 最後加載@PostConstruct ...

  2. sql server Datetime格式轉換

    select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT( ...

  3. 【風馬一族_Android】Button 按鈕之記錄

    Button button = new Button(); Button button = (Button)findViewById(R.id.bt_button);//讓按鈕顯示灰色,失效 butt ...

  4. .NET基礎:C#靜態構造函數、靜態方法、靜態屬性

    用一個題目帶大家走進靜態函數,先看題目 class Program    {        public static int Count = 0;        static Program()   ...

  5. Foundation和UIKit框架圖

    學習Foundation和UIKit的時候比較容易忽視的一個問題: 對於一個新的類,知道它的用法和屬性方法,但往往忽視了它的繼承關系, 了解類的繼承關系能幫助加深對其理解. 另外在官方文檔中每一個類的 ...

  6. JNI- java.lang.UnsatisfiedLinkError: Native method not found

    http://stackoverflow.com/questions/24566127/jni-java-lang-unsatisfiedlinkerror-native-method-not-fou ...

  7. 同步讀取各平臺StreamingAssets文件

    //Path為StreamingAssets文件後面的路徑 public AssetBundle GetstreamingAssets(string Path) { #if UNITY_EDITOR ...

  8. ch.ethz.ssh2.Session和com.jcraft.jsch.Session

    通過Jsch連接step 1引入jar包<!-- jcraft包 -->        <dependency>            <groupId>com.j ...

  9. 2018牛客網暑假ACM多校訓練賽(第七場)I Tree Subset Diameter 動態規劃 長鏈剖分 線段樹

    原文鏈接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 題目傳送門 -  https://www.n ...

  10. Codeforces Round #FF (Div. 2) 題解

    比賽鏈接:http://codeforces.com/contest/447 A. DZY Loves Hash time limit per test 1 second memory limit p ...