利用ConcurrentHashMap来实现一个ConcurrentHashSet
package hashset; import java.io.Serializable; import java.util.AbstractSet; import java.util.Iterator; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; /** * @author xfyou * @date 2018/9/3 */ public class ConcurrentHashSet<E> extends AbstractSet<E> implements Set<E>, Serializable { private static final long serialVersionUID = -8672117787651310382L; private static final Object PRESENT = new Object(); private final ConcurrentHashMap<E, Object> map; public ConcurrentHashSet() { this.map = new ConcurrentHashMap<>(); } public ConcurrentHashSet(int initialCapacity) { this.map = new ConcurrentHashMap<>(initialCapacity); } @Override public Iterator<E> iterator() { return map.keySet().iterator(); } @Override public boolean isEmpty() { return map.isEmpty(); } @Override public boolean contains(Object o) { return map.containsKey(o); } @Override public boolean add(E e) { return map.put(e, PRESENT) == null; } @Override public boolean remove(Object o) { return map.remove(o) == PRESENT; } @Override public void clear() { map.clear(); } @Override public int size() { return map.size(); } }