主题001:低效使用keyset迭代,应该使用entrySet迭代
(Inefficient use of keySet iterator instead of entrySet iterator)
总结:
1,当遍历map,同时要获取key 和value时,推荐使用entrySet
示例功能与代码:
Map<Integer, String> userMap = new HashMap<>(16);
//填充数据
//进行遍历key 和value,组装数据
for (Integer key : userMap.keySet()) {
list.add(new Test(key, userMap.get(key)));
}`
优化后代码:
Map<Integer, String> userMap = new HashMap<>(16);
//填充数据
//进行遍历key 和value,组装数据
for (Map.Entry<Integer, String> entry : userMap.entrySet()) {
list.add(new TestData(entry.getKey(), entry.getValue()));
}
为什么说,这种情况下,keyset效率会低点,
可以简单理解为,keyset是先遍历查询到key ,再用key去查询value
而entrySet是在找到key的时候,顺带着把value也带出来了。
主题002: 本地变量存储了闲置不用的对象
(dead store to local variable)
总结:
1,不要写多余的代码,不要声明多余的变量;
2,当需要删除业务代码时,记得把不再使用的变量也一并删除
3,在一定程度上,也可以防错,例如明明一个要用的变量,但并没有被使用,说明,要不漏写代码了,要不就某个地方写错了
示例功能与代码:
public static void test20200310() {
//本地变量存储了闲置不用的对象
//dead store to local variable
Integer num1 = 88;
Integer num2 = 99;
System.out.println(num2);
}
方法中有2个变量,num1,num2, 但num2有使用,num1声明后并没有被使用,所以
Integer num1 = 88;
这行代码要删除掉
主题003: 无用的对象被创建
(Useless object created)
总结:
1,和“本地变量存储了闲置不用的对象”还是有区别的,一个是只是被创建了,但一直就没用到,这个侧重于该对象被创建,也有使用,但实际无实际价值
2,每一行代码要有它本身的价值
示例功能与代码:
public Result<String> selectStartEqpByTaskId(@RequestBody MoTaskIdParam param) {
EqpNameListRes res = new EqpNameListRes();
String eqpNameList = moTeamTaskService.selectStartEqpByTaskId(param, getUser());
res.setEqpNameList(eqpNameList);
return Result.ok(eqpNameList);
}
优化后代码:
public Result<String> selectStartEqpByTaskId(@RequestBody MoTaskIdParam param) {
String eqpNameList = moTeamTaskService.selectStartEqpByTaskId(param, getUser());
return Result.ok(eqpNameList);
}
上面的代码是一个查询方法,但可以看到方法体中的第一行代码实例化了一个EqpNameListRes,第三行也有使用,但实际返回时,和这个对象并没有关系。
主题004: 忽略了方法的返回值
(Method ignores return value)
总结:
1,准确使用方法,同时要细心
示例功能与代码:
public static void test20200313(){
//忽略了方法的返回值
//Method ignores return value
String replaceTest="aaaabbbcccaaa";
//把 b 改为 B
replaceTest.replace("b","B");
//输出replaceTest变没变
System.out.println(replaceTest);
//把 b 改为 B,并接收
replaceTest= replaceTest.replace("b","B");
//重新输出replaceTest变没变
System.out.println(replaceTest);
}
输出结果:
aaaabbbcccaaa
aaaaBBBcccaaa
可以看到第一次输出,字符串本身并没有改变,第二次输出,才改变了。因为replace方法是返回了一个新对象,而不是直接修改字符串本身。
因此,在使用系统方法时,注意是否有返回值,是否是直接改变他本身
共同学习,写下你的评论
评论加载中...
作者其他优质文章