随着工作经验的积累,在代码编写和优化方面,个人的心得体会总结以及有些从网上或书本中看到的有用技巧

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开发中的代码编写小技巧——避免重复代码编写的几种方法

    上一篇文章中程序员的幸福生活--有你的日子,每天都是情人节,收到了大家的很多好评.鼓励和祝福,非常感动,真诚的谢谢大家.也希望每个朋友都能保持一个积极向上的心态,去迎接丰富多彩的人生. 在开发过程中, ...

  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 一般概念 * 尽量使用完整的英 ...

随机推荐

  1. POJ 3304 Segments 叉积

    题意: 找出一条直线,让给出的n条线段在这条直线的投影至少有一个重合的点 转化一下,以重合的点作垂线,那么这条直线一定经过那n条线段.现在就是求找到一条直线,让这条直线经过所有线段 分析: 假设存在这 ...

  2. Tomcat:tomcat部署war包配置SSL访问

    Linux-CentOS7部署 war放置 war放到tomcat的webapps目录内 修改配置 修改tomcat的server.xml文件 HTTP: 找到Connector元素,修改端口 HTT ...

  3. php图片木马实现原理

    什么是木马 木马病毒是指隐藏在正常程序中的一段具有特殊功能的恶意代码,是具备破坏和删除文件.发送密码.记录键盘和攻击Dos等特殊功能的后门程序. 那,php的木马是长什么样的呢?我们来看下面这段代码: ...

  4. 使用Octotree插件在Edge上以树形结构浏览GitHub上的源码

    先预览效果左侧的目录通过点击,就可以到达对应的源码位置. 首先点击打开Edge中的浏览器扩展在右上角...=>点击扩展=>点击获取Microsoft Edge扩展按钮=>在左侧搜索所 ...

  5. docker安装应用整理

    nginx安装: docker run \ --name nginx \ --volume /var/data/nginx/nginx.conf:/etc/nginx/nginx.conf \ --v ...

  6. 解决 .net core 中 nuget 包版本冲突问题[转载]

    今天在一个 asp.net core 项目中遇到了 nuget 包版本冲突的问题,错误信息如下: Version conflict detected for Microsoft.AspNet.WebA ...

  7. DHCP部署与安全

    1.DHCP作用 (Dynamic Host Configure Protocol)自动分配ip地址 2.DHCP相关概念 地址池/作用域:(IP.子网掩码.网关.DNS.租期),DHCP协议端口是U ...

  8. 「AGC023D」 Go Home

    「AGC023D」 Go Home 传送门 神题. 首先我们可以倒着考虑. 当车到达最后一栋楼的时候,车上一定只有到这栋楼的员工. 当车到达倒数第二栋楼的时候,车上一定只有到达剩下两栋楼的员工. 设这 ...

  9. python 构造函数 析构函数

    #构造函数是在对象被创建是自动调用的方法,用来完成初始化操作class Test(object): def __init__(self, name): self.name = name print(' ...

  10. 编写mysql多实例启动脚本

    脚本原理: 启动MySQL动作: mysqld_safe来执行启动 停止MySQL动作: 使用mysqladmin来执行停止动作 重启的MySQL动作:    原理就是先停止,然后再启动 但是要注意: ...