Java代碼編寫、代碼優化技巧總結


審核下屬員工或同事的代碼時,總會發現不少的問題。

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

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. 初始化集合時盡量指定其大小

  這樣可以減少擴容的次數,耗費時間和性能,(至於為何要這樣呢?請查看第9條)

反例:

        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 方法。

 

 

 

 

 

 

 

 

 

 

 

---未完待續,不斷積累中... 請持續關注

 

 

壯士且慢,請留下足跡,點擊【推薦】再走唄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM