并发环境下ConcurrentHashSet和HashSet谁的性能更好?
//package com.google.code.yanf4j.util;
import java.io.Serializable;
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* A {@link ConcurrentHashMap}-backed {@link Set}.
*
* @author The Apache MINA Project (dev@mina.apache.org)
* @version $Rev: 597692 $, $Date: 2007-11-23 08:56:32 -0700 (Fri, 23 Nov 2007)
* $
*/
public class ConcurrentHashSet<E> extends MapBackedSet<E> {
private static final long serialVersionUID = 8518578988740277828L;
public ConcurrentHashSet() {
super(new ConcurrentHashMap<E, Boolean>());
}
public ConcurrentHashSet(Collection<E> c) {
super(new ConcurrentHashMap<E, Boolean>(), c);
}
@Override
public boolean add(E o) {
Boolean answer = ((ConcurrentMap<E, Boolean>) map).putIfAbsent(o,
Boolean.TRUE);
return answer == null;
}
}
最佳答案
在任何环境下HashSet
的性能都会优于ConcurrentHashSet
。当并发写入和读取开始发生时就会出现问题。
因此,对于并发环境,最好的一个是 ConcurrentHashSet
。
但是,如果您使用 HashSet
来存储一些仅在启动时加载的配置等(仅在初始写入后发生读取操作),那就没问题了。在我看来...
关于java - ConcurrentHashSet 与 HashSet 谁的性能更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14063858/