View Javadoc

1   package cz.cuni.amis.utils.sets;
2   
3   import java.util.Collection;
4   import java.util.Iterator;
5   import java.util.Set;
6   import java.util.concurrent.ConcurrentHashMap;
7   
8   public class ConcurrentHashSet<K> implements Set<K>{
9   
10  	private ConcurrentHashMap<K, K> map = new ConcurrentHashMap<K, K>();
11  	
12  	public ConcurrentHashSet() {
13  	}
14  	
15  	@Override
16  	public boolean add(K e) {
17  		boolean contains = map.containsKey(e);
18  		map.put(e,e);
19  		return !contains;
20  	}
21  
22  	@Override
23  	public boolean addAll(Collection<? extends K> c) {
24  		boolean changed = false;
25  		for (K element : c) {
26  			changed = add(element) || changed;
27  		}
28  		return changed;
29  	}
30  
31  	@Override
32  	public void clear() {
33  		map.clear();
34  	}
35  
36  	@Override
37  	public boolean contains(Object o) {
38  		return map.containsKey(o);
39  	}
40  
41  	@Override
42  	public boolean containsAll(Collection<?> c) {
43  		for (Object o : c) {
44  			if (!contains(o)) return false;
45  		}
46  		return true;
47  	}
48  
49  	@Override
50  	public boolean isEmpty() {
51  		return map.size() == 0;
52  	}
53  
54  	@Override
55  	public Iterator<K> iterator() {
56  		return map.values().iterator();
57  	}
58  
59  	@Override
60  	public boolean remove(Object o) {
61  		return map.remove(o) != null;
62  	}
63  
64  	@Override
65  	public boolean removeAll(Collection<?> c) {
66  		boolean changed = false;
67  		for (Object o : c) {
68  			changed = remove(o) || changed;
69  		}
70  		return changed;
71  	}
72  
73  	@Override
74  	public boolean retainAll(Collection<?> c) {
75  		clear();
76  		for (Object element : c) {
77  			add((K) element);
78  		}
79  		return true;
80  	}
81  
82  	@Override
83  	public int size() {
84  		return map.size();
85  	}
86  
87  	@Override
88  	public Object[] toArray() {
89  		return map.values().toArray();
90  	}
91  
92  	@Override
93  	public <T> T[] toArray(T[] a) {
94  		return map.values().toArray(a);
95  	}
96  
97  }