View Javadoc

1   package org.eclipse.jetty.util;
2   
3   import java.util.AbstractSet;
4   import java.util.Collection;
5   import java.util.Iterator;
6   import java.util.Map;
7   import java.util.Set;
8   import java.util.concurrent.ConcurrentHashMap;
9   
10  public class ConcurrentHashSet<E> extends AbstractSet<E> implements Set<E>
11  {
12      private final Map<E, Boolean> _map = new ConcurrentHashMap<E, Boolean>();
13      private transient Set<E> _keys = _map.keySet();
14  
15      public ConcurrentHashSet()
16      {
17      }
18  
19      @Override
20      public boolean add(E e)
21      {
22          return _map.put(e,Boolean.TRUE) == null;
23      }
24  
25      @Override
26      public void clear()
27      {
28          _map.clear();
29      }
30  
31      @Override
32      public boolean contains(Object o)
33      {
34          return _map.containsKey(o);
35      }
36  
37      @Override
38      public boolean containsAll(Collection<?> c)
39      {
40          return _keys.containsAll(c);
41      }
42  
43      @Override
44      public boolean equals(Object o)
45      {
46          return o == this || _keys.equals(o);
47      }
48  
49      @Override
50      public int hashCode()
51      {
52          return _keys.hashCode();
53      }
54  
55      @Override
56      public boolean isEmpty()
57      {
58          return _map.isEmpty();
59      }
60  
61      @Override
62      public Iterator<E> iterator()
63      {
64          return _keys.iterator();
65      }
66  
67      @Override
68      public boolean remove(Object o)
69      {
70          return _map.remove(o) != null;
71      }
72  
73      @Override
74      public boolean removeAll(Collection<?> c)
75      {
76          return _keys.removeAll(c);
77      }
78  
79      @Override
80      public boolean retainAll(Collection<?> c)
81      {
82          return _keys.retainAll(c);
83      }
84  
85      @Override
86      public int size()
87      {
88          return _map.size();
89      }
90  
91      @Override
92      public Object[] toArray()
93      {
94          return _keys.toArray();
95      }
96  
97      @Override
98      public <T> T[] toArray(T[] a)
99      {
100         return _keys.toArray(a);
101     }
102 
103     @Override
104     public String toString()
105     {
106         return _keys.toString();
107     }
108 }