博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java代码一些注意提升技巧
阅读量:4164 次
发布时间:2019-05-26

本文共 3173 字,大约阅读时间需要 10 分钟。

1. 创建集合的时候,尽量指定大小,在遍历 map 的时候,尽量使用效率高些的 entrySet 方式

public void testMap(){        // 【集合初始化尽量指定大小】        Map
map = new HashMap<>(6); map.put("第一","我的测试1"); map.put("第二","我的测试2"); map.put("第三",true); map.put("第四",0.1); map.put("第五",5.68D); map.put("第六","我的测试6"); // 遍历map 尽量注意用 entrySet 高效率 Set
> entries = map.entrySet(); for (Map.Entry
entry : entries) { String key = entry.getKey(); Object value = entry.getValue(); System.out.println(key+" "+value); } }

2.使用 Collection.isEmpty( ) 检测空 

public void testCollection(){        // 应该使用Collection.isEmpty()检测空        List
data = new ArrayList<>(); boolean empty = data.isEmpty(); }

3.循环拼接字符串 用 stringBuffer 或者 stringBuilder

public void testStringBuilder(){        // 线程不安全        StringBuilder stringBuilder = new StringBuilder();        // 线程安全        StringBuffer stringBuffer = new StringBuffer();        // 循环拼接字符串 用 stringBuffer 或者 stringBuilder        for (int i = 0; i < 10; i++) {            stringBuffer.append(" "+i);        }        System.out.println(stringBuffer.toString());    }

4. 如果在代码中需要频繁调用 contains 方法查找数据,可以先将 list 转换成 HashSet 实现,然后在调用 contains方法

public void testContains(){        /**         * 在 java 集合类库中,List 的 contains 方法普遍时间复杂度是 O(n) ,         * 如果在代码中需要频繁调用 contains 方法查找数据,可以先将 list 转换成 HashSet 实现,         * 将 O(n) 的时间复杂度降为 O(1) 。         */        List
list = Arrays.asList(1, 2, 3, 4, 5, 6); Set
set = new HashSet<>(list); for (int i = 0; i < 10; i++) { if(set.contains(i)){ System.out.println(i); } } }

5. 当要把其它对象或类型转化为字符串时,使用 String.valueOf(value)

public void testValueOf(){        // 当要把其它对象或类型转化为字符串时,使用 String.valueOf(value)        Integer integer = 12;        String str = String.valueOf(integer);        System.out.println(str);    }

6. 过时代码添加 @Deprecated 注解

@Deprecated    public void testAnn(){        // 过时代码添加 @Deprecated 注解    }

7. 禁止使用构造方法 BigDecimal(double), BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。

public void testBig(){        // 禁止使用构造方法 BigDecimal(double)        // BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。        //反例:        BigDecimal value = new BigDecimal(0.1D); // 0.100000000000000005551115...        // 正例:        BigDecimal value2 = BigDecimal.valueOf(0.1D);; // 0.1        // 加,减,乘,除        value.add(value2);        value.subtract(value2);        value.multiply(value2);        value.divide(value2);    }

8.  返回空数组和空集合而不是 null 。返回 null ,需要调用方强制检测 null ,否则就会抛出空指针异常。 返回空数组或空集合,有效地避免了调用方因为未检测 null 而抛出空指针异常,还可以删除调用方检测 null 的语句使代码更简洁。 

 

9. 字符串 String 的 split 方法,传入的分隔字符串是正则表达式!部分关键字(比如.[]()\| 等)需要转义。

public void testSplit(){        // 字符串 String 的 split 方法,传入的分隔字符串是正则表达式!部分关键字(比如.[]()\| 等)需要转义。        // 反例:        String[] split = "a.ab.abc".split(".");// 结果为[]        "a|ab|abc".split("|"); // 结果为["a", "|", "a", "b", "|", "a", "b", "c"]       // 正例:        "a.ab.abc".split("\\."); // 结果为["a", "ab", "abc"]        "a|ab|abc".split("\\|"); // 结果为["a", "ab", "abc"]    }

 

转载地址:http://pqxxi.baihongyu.com/

你可能感兴趣的文章