2012-12-28 101 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來存儲僅在啓動時加載的某些配置等(只有讀操作發生在初始寫入後)纔可以。在我看來......