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. 初始化集合时尽量指定其大小
这样可以减少扩容的次数,耗费时间和性能,
反例:
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 一般概念 * 尽量使用完整的英 ...
随机推荐
- 2、mysql编译安装
2.1前言: 此文档介绍的是cmake编译安装的方式: 二进制的安装方式在linux运维_集群_01中有详细的安装说明(已经编译完成,进行初始操作即可) 初始化操作时需要对编译好的mysql进行一下备 ...
- 连接mysql数据库实现增删改查(一)
在python中我们通过pymysql来连接数据库,具体实现如下 ''' 连接mysql数据库 此类进行封装了一些基础的操作数据库方法 ''' import pymysql from Homework ...
- Robot Framework中SSHLibrary 学习与总结
一.安装SSHLibrary 二.关键字 1.与连接相关的 Open Connection Get Connection Get Connections Switch Connection Clos ...
- php错误处理,自动加载,以及栈堆内存和运行模式堆浅解 (转)
Php错误处理 Php错误级别: E_ERROR 致命错误,会终止脚本运行.值为1 E_WARNING 警告错误,给出提示,不会终止运行值为2 E_PARSE 编译时的语法解析错误,解析错误仅仅由分析 ...
- Kotlin Coroutine(协程): 一、样例
@ 目录 前言 一.直接上例子 1.延时任务. 2.异步任务 3.并行任务: 4.定时任务: 总结 前言 你还在用 Hanlder + Message? 或者 AsyncTask? 你还在用 Rxja ...
- Jenkins集成SonarQube遇到的报错
Jenkins集成Sonar过程中遇到的报错 1.jenkins中无法添加sonarqube的token凭证 因为添加的凭证类型错误,所以无法添加token,类型应该选择"Secret te ...
- Java基础00-继承17
1. 继承 1.1 继承概述 但是我们将相同的类提取出来就会变成这个样子 让他们之间产生一个继承的关系 1.2 继承的好处和弊端 IS-A.HAS-A和USE-A关系 苹果是水果的一种可以使用继承猫是 ...
- [刘阳Java]_为什么要前后端分离
前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多 ...
- [刘阳Java]_BeanNameViewResolver视图解析器_第8讲
BeanNameViewResolver:这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象.它要求视图bean对象都定义在Spring ...
- ZYNQ Linux 移植:包含petalinux移植和手动移植debian9
参考: https://electronut.in/workflow-for-using-linux-on-xilinx-zynq/ https://blog.csdn.net/m0_37545528 ...