您的位置:首页 > 编程语言 > Java开发

java map对象的效率比较

2011-12-19 20:19 337 查看
@SuppressWarnings("unchecked")

public class MapPerformance {

public static void main(String[] args) {

MapPerformance test = new MapPerformance(10 * 10000);

out.print(StringUtils.center("Test Map Performance: loop=" + test.loop, 80, '-'));

out.printf("\n sssssss", "", "put", "put", "remove", "get",

"iterator","for");

test.benchmark(new HashMap());

test.benchmark(new Hashtable());

test.benchmark(new LinkedHashMap());

test.benchmark(new IdentityHashMap());

test.benchmark(new TreeMap());

test.benchmark(new WeakHashMap());

test.benchmark(new ConcurrentHashMap());

}

private int loop = 10000;

public MapPerformance(int loop) {

this.loop = loop;

}

public void benchmark(Map map) {

out.printf("\n s", map.getClass().getSimpleName());

int j;

StopWatch watch = null;

//1.测试顺序性能(Add)

(watch = new StopWatch()).start();

for (int i = 0; i < loop; i++) {

map.put(i, i);

}

watch.stop();

out.printf("d", watch.getTime());

//2.测试随机插入性能(Random insert)

(watch = new StopWatch()).start();

for (int i = 0; i < loop; i++) {

j = (int) (Math.random() * loop);

map.put(j, new Integer(-j));

}

watch.stop();

out.printf("d", watch.getTime());

//3.测试随机索引删除(Random remove)

(watch = new StopWatch()).start();

for (int i = 0; i < loop; i++) {

j = (int) (Math.random() * loop);

map.remove(j);

}

watch.stop();

out.printf("d", watch.getTime());

//4.测试随机取数性能(Random get)

(watch = new StopWatch()).start();

for (int i = 0; i < loop; i++) {

j = (int) (Math.random() * loop);

map.get(j);

}

watch.stop();

out.printf("d", watch.getTime());

//6.测试迭代性能(Iterator)

(watch = new StopWatch()).start();

Iterator<Object> iter = map.values().iterator();

while (iter.hasNext()) {

iter.next();

}

watch.stop();

out.printf("d", watch.getTime());

//7.测试迭代性能(Iterator)

(watch = new StopWatch()).start();

// Iterator<Object> iter = list.iterator();

for (Object obj : map.values()) {

}

watch.stop();

out.printf("d", watch.getTime());

}
}

结果:

-----------------------Test Map Performance: loop=100000------------------------

put random-put remove get
iterator for

HashMap 47 94 78
47 0 0

Hashtable 141 78 78 62
0 16

LinkedHashMap 125 78 94 47
0 0

IdentityHashMap 172 265 47 63 15
16

TreeMap 94 125 187 109
0 0

WeakHashMap 156 250 47 31
0 16

ConcurrentHashMap 94 140 79 46 0
16

结论:

1、HashMap的性能比较高,但不是线程安全的

2、ConcurrentHashMap的put性能没有HashMap的高,get的性能与HashMap一样或者略高于,但是是线程安全的

参考:http://blog.sina.com.cn/s/blog_56fd58ab0100qel3.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: