使用正确的集合类
在我们的代码中常用的集合类是: HashMap 、 Hashtable 和 ConcurrentHashMap ,以及 List ( ArrayList )。
ConcurrentHashMap 在多线程时性能和并发性最好,多用于并发缓存。
Hashtable 的大部份方法都是同步的,多线程安全性最好,但是性能比较低。
HashMap 的方法是不同步的,以降低安全性换取高性能。
在这三个 Map 类型的集合,并发情况下首选 ConcurrentHashMap ,其他如果无并发时(方法内的局部缓存)考虑使用 HashMap 。
List 使用一般问题不大。读操作高于写操作的 List 最好使用 ArrayList ;如果需要对 List 进行排序最好使用 LinkedList (链表实现,插入效率高)
正确使用循环
不正确的循环写法可能导致糟糕的性能。通过对数组 [] 和 List(ArrayList) 遍历的不同实现进行测试,不同的写法表现不同
写法 1
String[ ] a =new String[1000];
int len = a.length;
for( int i=0;i<len;i++){}
写法 2
for (int i=0;i<a.length;i++){}
写法 3
for( String s : a){}
l 3 种写法在数据量比较少时性能差别不大。中等数据量(以 K 为单位)时 1 , 3 性能接近,好于 2 。数据量很大时 3 者性能又很接近。总体看写法 1 性能高一些。
l 循环终止条件使用数字变量或常量时性能最好,尽量避免使用方法调用结果(如 list.size() 这样的终止条件)。
对于 List 的遍历这两种写法, 2 , 3 的性能明显低于 1 。另外一种写法:
String[ ] cps = new String[list.size()];
list.toArray( cps);
size = cps.length;
for (int i = 0; i < size; i++) {
s1 = cps[i];
}
性能最好。原因应该是 list 转换成数组使用 System.copyArray (本机代码)性能高,在循环中直接对数组元素索引操作性能高于 list.get() 。
循环结束条件不要使用方法调用结果,尽量使用变量或常量;
循环计数器变量最好是 int 型的;
循环内尽量避免不断的 new ,尽量在循环体外创建临时变量,在循环体内重用;
更多信息请查看 java进阶网 http://www.javady.com