java - ConcurrentHashSet 与 HashSet 谁的性能更好?

标签 java

并发环境下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/

相关文章:

java - 无法执行数组的深层复制

java - 在 JavaFX 应用程序的 SQLite 中插入数据

java - web-app_2_5.xsd 在 Weblogic 中验证 web.xml 时显示错误

java - 一次导入多个静态字符串

java - 如何在Ubuntu 11.10上获得JOGL的工作

JavaFX-8 FileChooser Image(后端复制粘贴)

java - 如何将错误从执行程序 channel 路由到错误 channel ?

java - 在特定模式之后提取字符串

java - 如何从列表中获取重复值的数量(计数)

java - 如何使用抽象方法设置私有(private)数据字段?