避免对boolean类型的判定
反例:
if("a".equles("a")==true)`{
}
正例:
if(Objects.equles("a","a"))`{
}
多用条件判断符
反例:
if(a<0)`{
return 0;
}else{
return 1;
}
正例:
a<0?0:1;
避免使用instanceof、避免把子类向父类转型掌握好多态即可
建议多使用局部变量 局部变量保存在栈中,占用的内存随着方法的执行完毕而被释放
多使用位运算代替算术运算 就是可读性差点
一维数组和二维数组的恩怨情仇 保存同样的数据使用一维数组和二维数组的区别是前者以时间换空间后者是以空间换时间
不要经常使用取反操作符
反例:
if(!a<0)`{
return 0;
}else{
return 1;
}
正例:
if(a>=0)`{
return 0;
}else{
return 1;
}
快速操作一个超大List的连续性数据
使用集合的List<E> subList(int fromIndex,int toIndex)
方法可以返回一个超大List的一段连续性数据,此时对这个subList的所有操作比如clear()
等操作都会影响到原List
当一个方法的返回值是List的时候请返回一个size为0的list而不是null从而避免空指针异常
单个字符串连接时使用单引号代替双引号 反例:
"abc"+"d";
正例:
"abc"+'d';
大量字符串拼接时使用StringBuffer代替+
切割字符串的时候使用StringTokenizer代替split
提前计算出需要循环的次数 反例:
for(int i=0i<a.size();;i++){
}
正例:
for(int i=0,n=a.size();i<n;i++){
}
减少不必要的需要循环的次数 反例:
int index=-1;
for(int i=0,n=a.size();i<n;i++){
if(a.get(i)==3){
index=i;
}
}
正例:
int index=-1;
for(int i=0,n=a.size();i<n;i++){
if(a.get(i)==3){
index=i;
break;
}
}
不要在循环中改变数组/List的大小
使用System.arrayCopy
进行复制数组
使用Buffer进行IO操作
释放资源的代码要放在finally代码块中
多用java.util.Obects工具类