今天看到一篇文章,相当好,其中有一部分陋习也是我经常有的,先总结下来。
1. boolean的赋值直接用 true/flase,而不是 new Boolean(true/flase);
2. 对 Integer的赋值使用 Integer.valueOf(),而不是new Integer();
3. 使用StringBuffer来使字符串相加,而不是使用 String + String.
4. 使用Hash表(HashMap),但是如果数据较大,利用缓存,用算法淘汰不再使用的HashMap,一方面增快速度,一方面降低内存占用;
5. 避免过深的类层次结构和调用过深的方法;
6. 变量只有在用到的时候才去定义和实例化;
7. 尽量避免使用static,类内私有常量可以用final来代替;
8. 对频繁使用的变量使用对象池技术;
9. 保证每个IO操作,connection及时关闭。
对3.的补充,StringBuffer.append(),是运行的时候比较快,但是"+"是在编译的时候已经做好了,看来以后运用的时候,如果是固定的字符串相加,使用“+”和StringBuffer.append()一样,如果是运行时打的变量相加还是用StringBuffer.append()。
好习惯:
1. 注释尽可能全面;
2. 多次使用的相同变量最好归纳为常量;
3. 尽量少的在循环中执行方法调用;
for (int i =0; i<list.size();i++) {} 修改为: for (int i=0,size=list.size();i<size;i++){}
4. 常量的定义可以放到接口中,因为接口里只允许存在常量,所以把常量放到接口中声明就可以省掉public static final 这几个关键字;
5. ArrayList和LinkedList的选择:
最好能够对List的使用场景做出评估,然后根据特性来选择,
ArrayList底层是使用数组实现的,因此随机读取数据会比LinkedList快很多;
而LinkedList是使用链表实现的,新增和删除数据的数据比ArrayList快很多。
6. 对字符串进行处理的时候尽量采用StringBuffer和StringBuilder。
7. 如果可以使用基本类型尽量使用基本类型,而不是包装类,因为基本类的变量时存放在栈中的,包装类则是存放在堆中,栈的操作速度比堆快很多;
8. 尽早将不再使用的变量引用赋值null,可以帮助jvm更快的进行内存回收;
9. 在finally块中对资源进行释放:典型场景是使用IO流的时候,不论师傅出现异常,最后都应该在finally中堆流进行关闭;
10. 在HashMap中使用一个Object作为key时,要注意如何区分Object是否相同:
在jdk的HashMap实现中,判断两个Object类型的key是否相同的标准时hashcode是否相同和equals方法的返回值。
如果需要对两个数据相同的内存对象当作不同的key存储到hashmap中就要对hashcode和equals方法进行覆盖。