2012-12-28 60 views
0

针对HashSet的ConcurrentHashSet在并发环境中性能更好吗?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 ([email protected]) 
* @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; 
    } 
} 
+0

我们熟悉Set实现。无需发布源代码:-) – Thihara

+0

@Thihara这是ConcurrentHashSet,它不是在java api :) – Felix

+0

如果你扩展了你的核心需求?您可能或可能不需要线程安全的“Set”实现。 – fge

回答

1

在任何环境HashSet的表现会比ConcurrentHashSet更好。并发写入和读取开始时会出现问题。

因此,对于最好的并发环境是ConcurrentHashSet

但是,如果您正在使用HashSet来存储仅在启动时加载的某些配置等(只有读操作发生在初始写入后)才可以。在我看来......