com.truthbean.debbie.concurrent.ConcurrentHashSet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of debbie-core Show documentation
Show all versions of debbie-core Show documentation
a java microservice project
The newest version!
/**
* Copyright (c) 2022 TruthBean(Rogar·Q)
* Debbie is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
package com.truthbean.debbie.concurrent;
import java.io.Serializable;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author TruthBean/Rogar·Q
* @since 0.1.0
* Created on 2020-08-15 10:38
*/
public class ConcurrentHashSet extends AbstractSet
implements Set, Serializable {
private transient final ConcurrentHashMap map;
private static final Object PRESENT = new Object();
public ConcurrentHashSet() {
this.map = new ConcurrentHashMap<>();
}
public ConcurrentHashSet(int initialCapacity) {
this.map = new ConcurrentHashMap<>(initialCapacity);
}
public ConcurrentHashSet(int initialCapacity, float loadFactor) {
this.map = new ConcurrentHashMap<>(initialCapacity, loadFactor, 1);
}
public ConcurrentHashSet(int initialCapacity,
float loadFactor, int concurrencyLevel) {
this.map = new ConcurrentHashMap<>(initialCapacity, loadFactor, concurrencyLevel);
}
@Override
public Iterator iterator() {
return map.keySet().iterator();
}
@Override
public int size() {
return map.size();
}
@Override
public boolean add(E e) {
return map.putIfAbsent(e, PRESENT) == null;
}
@Override
public boolean contains(Object o) {
return map.containsKey(o);
}
@Override
public boolean isEmpty() {
return map.isEmpty();
}
@Override
public boolean remove(Object o) {
return map.remove(o) == null;
}
@Override
public void clear() {
map.clear();
}
}