用户工具

站点工具


java:bad-taste

性能

  1. 需要Map的主键和取值时使用entrySet(),entry.getKey|Value;如果仅使用主键可以使用keySet()
  2. 集合判空使用Collection.isEmpty()、CollectionUtils.isNotEmpty(col),而Collection.size()可能是O(n)
  3. 集合初始化尽量指定大小(减少扩容次数),new ArrayList<>(array.length)
  4. 循环中的字符串拼接应使用StringBuilder,一般的字符串拼接可以被编译器优化
  5. list随机访问判断instanceof RandomAccess,Collection.contains频繁调用O(n)可使用HashSet(list).contains,O(1)

优雅

  1. 长整型以大写L结尾,避免使用魔法值(不含-1 0 1,循环次数用MAX_COUNT)
  2. 集合静态变量应使用静态代码块赋值,初始化时仅new创建合适类型的具体实现
  3. 使用try-with-resources,删除未使用的私有方法、私有字段、局部变量、方法参数、多余括号
  4. 工具类添加私有构造函数屏蔽实例化,异常不便处理就跑出(谨慎捕获却不处理)
  5. 静态成员通过类访问,而非实例成员;null可用Objects.isNull(o)检测,避免捕获NullPointerException
  6. 使用String.valueOf(value)而非“”+value,过时代码使用@Deprecated

正确

  1. BigDecimal.valueOf(0.1D),优于BigDecimal(0.1D),后者存在精度丢失
  2. 返回空数组、空集合,而不是null,调用方不必判空从而更优雅;Collections.emptyList|Set|Map
  3. 相等判断时常量在前Status.OK.equals(status),或者使用Object.equals(Status.OK, status)
  4. 枚举的字段必须私有不可变private final,枚举变量是常量、线程安全的
  5. String.split(regex),正则分隔时部分字符需要转义 .[]()\|,“a.b|c”.split(“[\\.\\|]”)=[“a”,“b”,“c”]
java/bad-taste.txt · 最后更改: 2019/09/29 10:14 由 admin