java那些事
程序员文章站
2022-07-05 09:03:59
...
JAVA编程中尽量要做到的一些地方
1.尽量使用StringBuilder和StringBuffer进行字符串连接
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.尽量避免使用二维数组.
7.尽量避免使用split
除非是必须的,否则应该避免使用Split, Split由于支持正则表达式,所以效率比较低,如果是频繁的几十,百万级的调用会消耗大量资源,如果确实需要频繁的调用Split,
可以考虑使用aoache的StringUtils.split(string,char),
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.捕获不可能出现的异常
Code Review(代码评审)
1.尽量使用StringBuilder和StringBuffer进行字符串连接
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.尽量避免使用二维数组.
7.尽量避免使用split
除非是必须的,否则应该避免使用Split, Split由于支持正则表达式,所以效率比较低,如果是频繁的几十,百万级的调用会消耗大量资源,如果确实需要频繁的调用Split,
可以考虑使用aoache的StringUtils.split(string,char),
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); }
Code Review(代码评审)
- 1.测试代码不需要提交
- 2.特殊字符都提取为常量
- 3.只使用for循环能满足需求
- 4.参数使用前需要判断参数是否为空的情况
- 5.要求平均每5行代码有一行注释,注释只要写到站在阅读者的角度能看懂就行
- 6.非空判断使用StringUtil,或者非空的值放在equals前面
- 7.直接使用TopReviewerDO
- 8.变量取有意义的名字,去掉不需要的引用
- 9.如果在if里用了return,则不需要使用else
- 10.提高性能,只进行一次SQL查询
- 11.其高代码性能.实例化对象之前,先判断数据是否存在
- 12.增加方法和类的注释
- 13.可能空指针
- 14.空指针错误
- 15.重构一个方法