隨著工作經驗的積累,在代碼編寫和優化方面,個人的心得體會總結以及有些從網上或書本中看到的有用技巧
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代碼編寫、代碼優化技巧總結的更多相關文章
- Java學習---Java代碼編寫規範
編碼規範 1 前言為確保系統源程序可讀性,從而增强系統可維護性,java編程人員應具有基本類似的編程風格,茲制定下述Java編程規範,以規範系統Java部分編程.系統繼承的其它資源中的源程序也應按此規 ...
- Java代碼編寫規範(轉載)
編碼規範 1 前言為確保系統源程序可讀性,從而增强系統可維護性,java編程人員應具有基本類似的編程風格,茲制定下述Java編程規範,以規範系統Java部分編程.系統繼承的其它資源中的源程序也應按此規 ...
- Java代碼編寫規範(不是標准規範,自行整理,無須糾結)
最近回過頭來給以前的項目增加功能,發現之前寫的注釋非常不全,代碼也非常的不整潔,有些地方寫的''窩七八爛的,看著很不舒服:又恰好經理最近也經常跟我提起代碼規範,我們就討論了一下代碼規範的重要性和必要性 ...
- Java代碼編寫的一般性指導
(1) 命名規則:這個最基本,也最重要,請牢記. 1,類名首字母應該大寫. 2,字段.方法以及對象(句柄)的首字母應小寫. 3,對於所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字 ...
- VS開發中的代碼編寫小技巧——避免重複代碼編寫的幾種方法
上一篇文章中程序員的幸福生活--有你的日子,每天都是情人節,收到了大家的很多好評.鼓勵和祝福,非常感動,真誠的謝謝大家.也希望每個朋友都能保持一個積極向上的心態,去迎接豐富多彩的人生. 在開發過程中, ...
- Java代碼編寫的30條建議
1) 類名首字母應該大寫.字段.方法以及對象(句柄)的首字母應小寫.對於所有標識符,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母.例如: ThisIsAClassName thisIsM ...
- 大數據之路week07--day03(Hadoop深入理解,JAVA代碼編寫WordCount程序,以及擴展昇級)
什麼是MapReduce 你想數出一摞牌中有多少張黑桃.直觀方式是一張一張檢查並且數出有多少張是黑桃. MapReduce方法則是: 1.給在座的所有玩家中分配這摞牌 2.讓每個玩家數自己手中的牌有幾 ...
- Java 代碼編寫單例模式總結
手寫一個單例模式是 Java 面試中常見的問題,很多時候我們更偏向於簡單的寫一個餓漢或飽漢模式,深入研究的甚少,這裏列舉三種實現方式,並對各自的優缺進行分析. 1. 餓漢式 public class ...
- 高質量JAVA代碼編寫規範
1. Java 命名約定 除了以下幾個特例之外,命名時應始終采用完整的英文描述符.此外,一般應采用小寫字母,但類名.接口名以及任何非初始單詞的第一個字母要大寫. 1.1 一般概念 * 盡量使用完整的英 ...
- java代碼--------編寫0懂啊PI之間求隨機數的方法
總結:其實每次運行,顯示出來的結果個數是隨機的. package com.mmm; //編寫0到PI之間求隨機數的方法 public class MEm { public static void ma ...
隨機推薦
- springboot一個service內組件的加載順序
先加載自身構造器,所以在構造器中初始化時若使用需要注入的(即@Autowired注解的)組件相關的方法,則會報null: 然後加載注入的組件即@Autowired 最後加載@PostConstruct ...
- sql server Datetime格式轉換
select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT( ...
- 【風馬一族_Android】Button 按鈕之記錄
Button button = new Button(); Button button = (Button)findViewById(R.id.bt_button);//讓按鈕顯示灰色,失效 butt ...
- .NET基礎:C#靜態構造函數、靜態方法、靜態屬性
用一個題目帶大家走進靜態函數,先看題目 class Program { public static int Count = 0; static Program() ...
- Foundation和UIKit框架圖
學習Foundation和UIKit的時候比較容易忽視的一個問題: 對於一個新的類,知道它的用法和屬性方法,但往往忽視了它的繼承關系, 了解類的繼承關系能幫助加深對其理解. 另外在官方文檔中每一個類的 ...
- JNI- java.lang.UnsatisfiedLinkError: Native method not found
http://stackoverflow.com/questions/24566127/jni-java-lang-unsatisfiedlinkerror-native-method-not-fou ...
- 同步讀取各平臺StreamingAssets文件
//Path為StreamingAssets文件後面的路徑 public AssetBundle GetstreamingAssets(string Path) { #if UNITY_EDITOR ...
- ch.ethz.ssh2.Session和com.jcraft.jsch.Session
通過Jsch連接step 1引入jar包<!-- jcraft包 --> <dependency> <groupId>com.j ...
- 2018牛客網暑假ACM多校訓練賽(第七場)I Tree Subset Diameter 動態規劃 長鏈剖分 線段樹
原文鏈接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 題目傳送門 - https://www.n ...
- Codeforces Round #FF (Div. 2) 題解
比賽鏈接:http://codeforces.com/contest/447 A. DZY Loves Hash time limit per test 1 second memory limit p ...