All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sghd.common.utils.collection.ConcurrentHashSet Maven / Gradle / Ivy

The newest version!
package com.sghd.common.utils.collection;

import java.io.Serializable;
import java.util.AbstractSet;
import java.util.Collection;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 基于{@link ConcurrentHashMap}的{@link HashSet}
 * 
 * @author frank
 * @param  元素类型
 * @see ConcurrentHashMap
 */
public class ConcurrentHashSet extends AbstractSet implements Serializable {

	private static final long serialVersionUID = -807744025477162175L;

	protected final ConcurrentHashMap map;

	/**
	 * 创建一个带有默认初始容量 (16)、加载因子 (0.75) 和 concurrencyLevel (16) 的新的 set。
	 * 
	 * @see ConcurrentHashMap#ConcurrentHashMap()
	 */
	public ConcurrentHashSet() {
		this.map = new ConcurrentHashMap();
	}

	/**
	 * 创建一个带有指定初始容量、默认加载因子 (0.75) 和 concurrencyLevel (16) 的新的 set。
	 * 
	 * @param initialCapacity 初始容量。该实现执行内部的大小调整,以容纳这些元素。
	 * @see ConcurrentHashMap#ConcurrentHashMap(int)
	 */
	public ConcurrentHashSet(int initialCapacity) {
		this.map = new ConcurrentHashMap(initialCapacity);
	}

	/**
	 * 创建一个带有指定初始容量、加载因子和默认 concurrencyLevel (16) 的新的 set。
	 * 
	 * @param initialCapacity 该实现执行内部的大小调整,以容纳这些元素。
	 * @param loadFactor 加载因子阈值,用来控制重新调整大小。在每 bin 中的平均元素数大于此阈值时,可能要重新调整大小。
	 * @see ConcurrentHashMap#ConcurrentHashMap(int, float)
	 */
	public ConcurrentHashSet(int initialCapacity, float loadFactor) {
		this.map = new ConcurrentHashMap(initialCapacity, loadFactor);
	}

	/**
	 * 创建一个带有指定初始容量、加载因子和并发级别的新的 set。
	 * 
	 * @param initialCapacity 初始容量。该实现执行内部大小调整,以容纳这些元素。
	 * @param loadFactor 加载因子阈值,用来控制重新调整大小。在每 bin 中的平均元素数大于此阈值时,可能要重新调整大小。
	 * @param concurrencyLevel 当前更新线程的估计数。该实现将执行内部大小调整,以尽量容纳这些线程。
	 * @see ConcurrentHashMap#ConcurrentHashMap(int, float, int)
	 */
	public ConcurrentHashSet(int initialCapacity, float loadFactor, int concurrencyLevel) {
		this.map = new ConcurrentHashMap(initialCapacity, loadFactor, concurrencyLevel);
	}

	/**
	 * 构造一个包含指定 collection 中的元素的新 set。使用默认的加载因子 0.75 和足以包含指定 collection 中所有元素的初始容量来创建 ConcurrentHashMap。
	 * 
	 * @param collection 其中的元素将存放在此 set 中的 collection
	 */
	public ConcurrentHashSet(Collection collection) {
		this(collection.size());
		addAll(collection);
	}

	@Override
	public int size() {
		return map.size();
	}

	@Override
	public boolean contains(Object o) {
		return map.containsKey(o);
	}

	@Override
	public Iterator iterator() {
		return map.keySet().iterator();
	}

	@Override
	public boolean add(E o) {
		return map.put(o, Boolean.TRUE) == null;
	}

	@Override
	public boolean remove(Object o) {
		return map.remove(o) != null;
	}

	@Override
	public void clear() {
		map.clear();
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy