Java中有一些Map包含:TreeMap,HashMap,Hashtable,ConcurrentHashMap,WeakHashMap
TreeMap,WeakHashMap性能较差,他们是用红黑树实现的。
HashMap,Hashtable性能较好,使用的是hash
ConcurrentHashMap在多核机器上最好,它是专门为多核设计的,充分利用了多核的资源。
在单cpu机器下的性能:
use TreeMap cost time: 844
use HashMap cost time: 437
use HashTable cost time: 406
use ConcurrentHashMap cost time: 735
use WeakHashMap cost time: 922
use TreeMap cost time: 875
use HashMap cost time: 422
use HashTable cost time: 438
use ConcurrentHashMap cost time: 734
use WeakHashMap cost time: 938
use TreeMap cost time: 860
use HashMap cost time: 437
use HashTable cost time: 407
use ConcurrentHashMap cost time: 750
use WeakHashMap cost time: 953
在一台4个cpu的机器上的性能:
use TreeMap cost time: 547
use HashMap cost time: 266
use HashTable cost time: 266
use ConcurrentHashMap cost time: 234
use TreeMap cost time: 562
use HashMap cost time: 266
use HashTable cost time: 265
use ConcurrentHashMap cost time: 250
use TreeMap cost time: 547
use HashMap cost time: 281
use HashTable cost time: 250
use ConcurrentHashMap cost time: 250
测试代码如下:
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Map;
import java.util.TreeMap;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
public class MapPerformanceTest {
/**
* @param args
*/
public static void main(String[] args)
{
System.out.print("use TreeMap ");
testCostTime(new TreeMap());
System.out.print("use HashMap ");
testCostTime(new HashMap());
System.out.print("use HashTable ");
testCostTime(new Hashtable());
System.out.print("use ConcurrentHashMap ");
testCostTime(new ConcurrentHashMap());
System.out.print("use WeakHashMap ");
testCostTime(new WeakHashMap());
}
private static void testCostTime(Map map) {
int NUMBER = 300000;
long startTime = System.currentTimeMillis();
for (int i = 0; i < NUMBER; i++)
{
if (!map.containsKey(i))
{
map.put(i, String.valueOf(i));
}
}
long endTime = System.currentTimeMillis();
System.out.println("cost time: "+(endTime-startTime));
}
}
原文:
http://blog.163.com/gaochan@126/blog/static/355557322010019540563/