基于ConcurrentHashMap实现ConcurrentHashSet
来源:互联网 发布:gas mask mac 下载 编辑:程序博客网 时间:2024/06/16 04:48
我们知道,在Java中,HashMap是线程不安全的,ConcurrentHashMap并发优化的HashMap,而JDK并未提供ConcurrentHashSet。
但我们可以基于ConcurrentHashMap实现ConcurrentHashSet。
示例如下:
package hello;import java.util.Collection;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;/** * 基于ConcurrentHashMap实现ConcurrentHashSet * */public class ConcurrentHashSet<E> implements Set<E> { private final Map<E, Object> map; private static final Object OBJ = new Object(); public ConcurrentHashSet(int size) { map = new ConcurrentHashMap<>(size); } public ConcurrentHashSet() { map = new ConcurrentHashMap<>(); } @Override public int size() { return map.size(); } @Override public boolean isEmpty() { return map.isEmpty(); } @Override public boolean contains(Object o) { return map.containsKey(o); } @Override public Iterator<E> iterator() { return map.keySet().iterator(); } @Override public Object[] toArray() { return map.keySet().toArray(); } @Override public <T> T[] toArray(T[] a) { return map.keySet().toArray(a); } @Override public boolean add(E e) { return map.put(e, OBJ) == null; } @Override public boolean remove(Object o) { return map.remove(o) == null; } @Override public boolean containsAll(Collection<?> c) { return map.keySet().containsAll(c); } @Override public boolean addAll(Collection<? extends E> c) { boolean changed = false; for (E e : c) { if (map.put(e, OBJ) == null) { changed = true; } } return changed; } @Override public boolean retainAll(Collection<?> c) { throw new UnsupportedOperationException(); } @Override public boolean removeAll(Collection<?> c) { throw new UnsupportedOperationException(); } @Override public void clear() { map.clear(); }}
阅读全文
0 0
- 基于ConcurrentHashMap实现ConcurrentHashSet
- 基于ConcurrentHashMap实现带时限的缓存
- 深入Java集合学习系列:ConcurrentHashSet简单实现
- concurrentHashMap 实现
- 介绍ConcurrentHashMap以及ConcurrentHashMap的内部实现
- ConcurrentHashMap之实现细节
- ConcurrentHashMap之实现细节
- ConcurrentHashMap之实现细节
- ConcurrentHashMap实现细节
- ConcurrentHashMap之实现细节
- ConcurrentHashMap之实现细节
- ConcurrentHashMap之实现细节
- ConcurrentHashMap之实现细节
- java ConcurrentHashMap实现机制
- ConcurrentHashMap之实现细节
- ConcurrentHashMap之实现细节
- ConcurrentHashMap实现原理
- ConcurrentHashMap之实现细节
- ubuntu误删文件造成软件包信息列表损坏无法更新或安装文件
- 关于typeAliases标签理解 自己挖的坑啊,解决了好久的问题。
- 半夜三更搞不同长度字符对齐问题,头痛
- 1_字符设备驱动程序之LED驱动程序
- 蓝牙模块DIY A09 HC-05主从机一体蓝牙模块 无线蓝牙 串口透传
- 基于ConcurrentHashMap实现ConcurrentHashSet
- 库函数和系统调用之间的联系和区别
- Java常用排序算法冒泡排序与选择排序总结
- 274. H-Index
- C语言的内存管理
- 嵌入式系统学习路线
- C语言中内存分配
- TensorFlow基础(一)
- MD5加密算法原理