加入收藏 | 设为首页 | 会员中心 | 我要投稿 厦门站长网 (https://www.0592zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

消灭 Java 代码的“坏味道”

发布时间:2019-10-12 06:35:10 所属栏目:优化 来源:王超
导读:副标题#e# 代码中的坏味道,如私欲如灰尘,每天都在增加,一日不去清除,便会越累越多。如果用功去清除这些坏味道,不仅能提高自己的编码水平,也能使代码变得精白无一毫不彻。这里,一直从事Java研发相关工作的阿里高级地图技术工程师王超,整理了日常工作

正例:

  1. // 调用别人的服务获取到list 
  2. List<Integer> list = otherService.getList(); 
  3. if (list instanceof RandomAccess) { 
  4.     // 内部数组实现,可以随机访问 
  5.     System.out.println(list.get(list.size() - 1)); 
  6. } else { 
  7.     // 内部可能是链表实现,随机访问效率低 

频繁调用 Collection.contains 方法请使用 Set

在 java 集合类库中,List 的 contains 方法普遍时间复杂度是 O(n) ,如果在代码中需要频繁调用 contains 方法查找数据,可以先将 list 转换成 HashSet 实现,将 O(n) 的时间复杂度降为 O(1) 。

反例:

  1. ArrayList<Integer> list = otherService.getList(); 
  2. for (int i = 0; i <= Integer.MAX_VALUE; i++) { 
  3.     // 时间复杂度O(n) 
  4.     list.contains(i); 

正例:

  1. ArrayList<Integer> list = otherService.getList(); 
  2. Set<Integer> set = new HashSet(list); 
  3. for (int i = 0; i <= Integer.MAX_VALUE; i++) { 
  4.     // 时间复杂度O(1) 
  5.     set.contains(i); 

让代码更优雅

长整型常量后添加大写 L

在使用长整型常量值时,后面需要添加 L ,必须是大写的 L ,不能是小写的 l ,小写 l 容易跟数字 1 混淆而造成误解。

反例:

  1. long value = 1l; 
  2. long max = Math.max(1L, 5); 

正例:

  1. long value = 1L; 
  2. long max = Math.max(1L, 5L); 

不要使用魔法值

当你编写一段代码时,使用魔法值可能看起来很明确,但在调试时它们却不显得那么明确了。这就是为什么需要把魔法值定义为可读取常量的原因。但是,-1、0 和 1不被视为魔法值。

反例:

  1. for (int i = 0; i < 100; i++){ 
  2.     ... 
  3. if (a == 100) { 
  4.     ... 

正例:

  1. private static final int MAX_COUNT = 100; 
  2. for (int i = 0; i < MAX_COUNT; i++){ 
  3.     ... 
  4. if (count == MAX_COUNT) { 
  5.     ... 

不要使用集合实现来赋值静态成员变量

对于集合类型的静态成员变量,不要使用集合实现来赋值,应该使用静态代码块赋值。

反例:

  1. private static Map<String, Integer> map = new HashMap<String, Integer>() { 
  2.     { 
  3.         put("a", 1); 
  4.         put("b", 2); 
  5.     } 
  6. }; 
  7.  
  8.  
  9. private static List<String> list = new ArrayList<String>() { 
  10.     { 
  11.         add("a"); 
  12.         add("b"); 
  13.     } 
  14. }; 

正例:

  1. private static Map<String, Integer> map = new HashMap<>(); 
  2. static { 
  3.     map.put("a", 1); 
  4.     map.put("b", 2); 
  5. }; 
  6.  
  7.  
  8. private static List<String> list = new ArrayList<>(); 
  9. static { 
  10.     list.add("a"); 
  11.     list.add("b"); 
  12. }; 

建议使用 try-with-resources 语句

Java 7 中引入了 try-with-resources 语句,该语句能保证将相关资源关闭,优于原来的 try-catch-finally 语句,并且使程序代码更安全更简洁。

(编辑:厦门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!