JAVA编程中尽量要做到的一些地方
1.[size=large][color=darkblue]尽量使用StringBuilder和StringBuffer进行字符串连接[/color][/size]
2.单线程应尽量使用HashMap,ArrayList HashTable, vector等使用了同步机制,降低了性能.
3.尽量减少对变量的重复计算
Eg: for(int i = 0; i<list.size(); i++) 应该改为: for(int i = 0; len = list.size(); i<len; i++)
4.尽量使用移位来代替"a/b, a*b"的操作
"/"是一个代价很高的操作.使用移位的操作将会更快和更有效
Eg: int num =a/4; int num = a/8;
int num =a*4; int num = a*8;
应该改为:int num = a>>2; int num = a>>3;
int num = a<<2; int num = a<<3;
5.尽量确定StringBuffer的容器
StringBuffer的构造器会创建一个默认大小(通常是16)的字符数组,在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,
并将原先的数组复制过来,在丢弃旧的数组.在大多数情况下,你可以在创建StringBuffer的时候指定大小,这样就避免了哎容量不够的时候自动增长,以提高性能.
6.[size=large][color=darkblue]尽量避免使用二维数组.[/color][/size]
7.[size=medium][color=violet]尽量避免使用split[/color][/size]
除非是必须的,否则应该避免使用Split, Split由于支持正则表达式,所以效率比较低,如果是频繁的几十,百万级的调用会消耗大量资源,如果确实需要频繁的调用Split,
[size=x-large][color=red]可以考虑使用aoache的StringUtils.split(string,char),[/color][/size]
8.ArrayList & LinkedList
一个线性表,一个是链表,
一句话,随机查询尽量使用ArrayList,ArrayList优于LinkedList,LinkedList还要移动指针.
添加删除的操作LinkedList优于ArrayList,ArrayList还要移动数据,(理论性分析)
9.尽量使用System.arraycopy()代替通过来循环复制数组
System.arraycopy()要比通过循环来复制数组快的多
10.数字转换成字符串
String.valueOf(set.size())
11.捕获所有的异常
catch(NoResultException)
12.忽略所有异常
13.异常传播
14.捕获不可能出现的异常
[size=large][color=red]Code Review(代码评审)[/color][/size]
[list]
[*]1.测试代码不需要提交
[*]2.特殊字符都提取为常量
[*]3.只使用for循环能满足需求
[*]4.参数使用前需要判断参数是否为空的情况
[*]5.要求平均每5行代码有一行注释,注释只要写到站在阅读者的角度能看懂就行
[*]6.非空判断使用StringUtil,或者非空的值放在equals前面
[*]7.直接使用TopReviewerDO
[*]8.变量取有意义的名字,去掉不需要的引用
[*]9.如果在if里用了return,则不需要使用else
[*]10.提高性能,只进行一次SQL查询
[*]11.其高代码性能.实例化对象之前,先判断数据是否存在
[*]12.增加方法和类的注释
[*]13.可能空指针
[*]14.空指针错误
[*]15.重构一个方法
[/list]
1.[size=large][color=darkblue]尽量使用StringBuilder和StringBuffer进行字符串连接[/color][/size]
2.单线程应尽量使用HashMap,ArrayList HashTable, vector等使用了同步机制,降低了性能.
3.尽量减少对变量的重复计算
Eg: for(int i = 0; i<list.size(); i++) 应该改为: for(int i = 0; len = list.size(); i<len; i++)
4.尽量使用移位来代替"a/b, a*b"的操作
"/"是一个代价很高的操作.使用移位的操作将会更快和更有效
Eg: int num =a/4; int num = a/8;
int num =a*4; int num = a*8;
应该改为:int num = a>>2; int num = a>>3;
int num = a<<2; int num = a<<3;
5.尽量确定StringBuffer的容器
StringBuffer的构造器会创建一个默认大小(通常是16)的字符数组,在使用中,如果超出这个大小,就会重新分配内存,创建一个更大的数组,
并将原先的数组复制过来,在丢弃旧的数组.在大多数情况下,你可以在创建StringBuffer的时候指定大小,这样就避免了哎容量不够的时候自动增长,以提高性能.
6.[size=large][color=darkblue]尽量避免使用二维数组.[/color][/size]
7.[size=medium][color=violet]尽量避免使用split[/color][/size]
除非是必须的,否则应该避免使用Split, Split由于支持正则表达式,所以效率比较低,如果是频繁的几十,百万级的调用会消耗大量资源,如果确实需要频繁的调用Split,
[size=x-large][color=red]可以考虑使用aoache的StringUtils.split(string,char),[/color][/size]
8.ArrayList & LinkedList
一个线性表,一个是链表,
一句话,随机查询尽量使用ArrayList,ArrayList优于LinkedList,LinkedList还要移动指针.
添加删除的操作LinkedList优于ArrayList,ArrayList还要移动数据,(理论性分析)
9.尽量使用System.arraycopy()代替通过来循环复制数组
System.arraycopy()要比通过循环来复制数组快的多
10.数字转换成字符串
String.valueOf(set.size())
11.捕获所有的异常
catch(NoResultException)
12.忽略所有异常
catch(Exception e) {
throw new MyRuntimeException(" Could not do stuff because: " +e.getMessage, e);}
13.异常传播
try{} catch(ParseException e) {
throw new RuntimeException(e.getMessage(), e)
}
14.捕获不可能出现的异常
catch(SomeException e) {
throw new IllegalStateException(e.getMessage(), e);
}
[size=large][color=red]Code Review(代码评审)[/color][/size]
[list]
[*]1.测试代码不需要提交
[*]2.特殊字符都提取为常量
[*]3.只使用for循环能满足需求
[*]4.参数使用前需要判断参数是否为空的情况
[*]5.要求平均每5行代码有一行注释,注释只要写到站在阅读者的角度能看懂就行
[*]6.非空判断使用StringUtil,或者非空的值放在equals前面
[*]7.直接使用TopReviewerDO
[*]8.变量取有意义的名字,去掉不需要的引用
[*]9.如果在if里用了return,则不需要使用else
[*]10.提高性能,只进行一次SQL查询
[*]11.其高代码性能.实例化对象之前,先判断数据是否存在
[*]12.增加方法和类的注释
[*]13.可能空指针
[*]14.空指针错误
[*]15.重构一个方法
[/list]