部分开发经验总结

1、MyBatis 不要为了多个查询条件而写 1 = 1 请熟练使用动态sql拼接的关键字

原因有二:

  • 当遇到多个查询条件时,虽然使用where 1=1可以很方便的解决问题,但是这样会造成非常大的性能损失,因为添加了where 1=1的过滤条件之后,数据库将不会使用索引等查询优化策略,数据库将会进行全表扫描,当数据量大时查询速度将非常慢;
  • 这种方式也可能会存在SQL注入的风险。

2、迭代entrySet() 获取Map 的key 和value

当循环中只需要获取Map的key时,迭代keySet()是正确的;但是当需要获取key和value时,迭代entrySet()才是更高效的做法,其比先迭代keySet()获得key后在去通过get(key)取值性能更好。如下代码所示:

Map<String, String> map = new HashMap<>(16);
map.put("hello", "world!");
map.put("hello1", "world!");
map.put("hello2", "world!");

for (Map.Entry<String, String> m : map.entrySet()) {
    String key = m.getKey();
    String value = m.getValue();
    System.out.println("key=" + key + " " + value);
}

3、使用list.isEmpty()来检测空或者null

使用list.size()来检测是否为空在逻辑上没有问题,但是使用list.isEmpty()使得代码更易读并且可以获得更好的性能;除此之外,任何list.isEmpty()实现的时间复杂度都是O(1),不需要多次遍历。但是某些通过list.size()方法实现的时间复杂度可能是O(n)。代码如下所示:

List<String> stringList = new ArrayList<>();
stringList.add("00");
if (stringList.isEmpty()) {
    System.out.println("list is empty ");
}

// 检测是否为null或者空 可以使用CollectionUtils工具类
if (CollectionUtils.isEmpty(stringList)) {
    System.out.println("list is null");
}

4、初始化集合时尽量指定其大小

初始化集合时尽量指定其大小,能有效减少集合的扩容次数,因为集合每次扩容的时间复杂度很可能是O(n),这样比较耗费时间和性能。

5、使用StringBuilder 拼接字符串

一般的字符串拼接在编译器java会对其进行优化,但是在循环中进行字符串的拼接操作,java编译器无法执行优化,所以需要使用StringBuilder 进行字符串拼接。

6、删除未使用的局部变量、方法参数、私有方法、字段和多余的括号,要保证留下来的每行代码都是必不可少的,不要有多余的无用代码。

7、字符串转化使用String.valueOf(value) 代替 " " + value

把其他对象或类型转化为字符串时,使用字符串转化使用String.valueOf(value) 比" " + value的效率更高。如下代码所示:

int num = 10;
String str = String.valueOf(num);
System.out.println(str);

8、优先使用常量或确定值调用equals 方法

对象的equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals 方法。

9、tring.split(String regex)部分关键字需要转译

使用字符串String 的split 方法时,传入的分隔字符串是正则表达式,则部分关键字(比如 .[]()| 等)需要转义。如下代码所示:

String[] strings = "a|ab|abc".split("\\|");
for (String string : strings) {
    System.out.println(string);
}

写出简洁规范的代码对于开发者而言非常重要,它体现了开发者自己的专业性和技术水平,而且能够赢得别人的赞赏。对团队来说,团队成员遵循统一的代码规范,能够更好地维护代码库的稳定和谐。

posted @ 2020-09-29 18:46  jason小蜗牛  阅读(118)  评论(0编辑  收藏  举报