1.循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展。
说明:反编译出的字节码文件显示每次循环都会new出一个StringBuilder对象,然后进行append操作,最后通过toString方法返回String对象,造成内存资源浪费。
反例:
String str = "start";
for (int i = 0; i < 100; i++) {
str = str + "hello";
}
2.集合:请为集合指定初始容量
List每新增一个元素,就会检测List的当前容量是否已经到达临界点,如果到达临界点则会扩容1.5倍。而扩容是相当耗资源的。
List<Student> list = new ArrayList<>(1000);
参考:http://blog.youkuaiyun.com/chenssy/article/details/38373833
3.使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。
说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。
正例:values()返回的是V值集合,是一个list集合对象;keySet()返回的是K值集合,是一个Set集合对象;entrySet()返回的是K-V值组合集合。
参考:http://blog.youkuaiyun.com/qian_xiao_lj/article/details/50747486
4.高度注意Map类集合K/V能不能存储null值的情况
如下表格:(使用时注意非空判断)
集合类 | key | value | super | 说明 |
Hashtable | 不允许null | 不允许null | Dicitionary | 线程安全 |
TreeMap | 不允许null | 允许null | AbstractMap | 线程不安全 |
HashMap | 允许null | 允许null | AbstractMap | 线程不安全 |
5.合理利用好集合的有序性(sort)和稳定性(order)
避免集合的无序性(unsort)和不稳定性(unorder)带来的负面影响。
说明:有序性是指遍历的结果是按某种比较规则依次排列的。稳定性指集合每次遍历的元素次序是一定的。
如:ArrayList是order/unsort;HashMap是unorder/unsort;TreeSet是order/sort。
6.Set元素的唯一性
快速对一个集合进行去重操作,避免使用List的contains方法进行遍历、对比、去重操作。
7.JAVA集合
①对java的集合的理解是相对于数组。数组只能存放类型一样的数据(基本数据/引用类型),集合可存储数目不固定的数据。
②java集合主要分为三种类型:set、map和List。Set存放的是对象的引用,没有重复对象。
③collection接口,最基本的集合接口,set和list都继承了collection,map没有。
该接口的方法:
boolean add(Object o)
void clear()
boolean isEmpty()
boolean contains(Object o)
Iterator iterator()
boolean remove(Object o)
int size()
Object[] toArray()
参考:http://blog.youkuaiyun.com/lushuaiyin/article/details/7381478/
8.