zoukankan      html  css  js  c++  java
  • 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 方法。

    ---未完待续,不断积累中... 请持续关注

    壮士且慢,请留下足迹,点击【推荐】再走呗

    本文来自博客园,作者:---葱---,转载请注明原文链接:https://www.cnblogs.com/sun-flower1314/p/15080925.html

  • 相关阅读:
    VC编程锦集-1
    VC窗口关闭调用顺序
    Windows消息WM_USER、WM_APP的区别
    Toolbar添加控件;创建多行toolbar;重新排列toolbar
    SQL模糊查询详解
    MySql格式化日期
    Apache PHP 服务环境配置
    kvm.install
    repo搭建
    apache故障处理
  • 原文地址:https://www.cnblogs.com/sun-flower1314/p/15080925.html
Copyright © 2011-2022 走看看