KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jruby > util > collections > WeakHashSet


1 /***** BEGIN LICENSE BLOCK *****
2  * Version: CPL 1.0/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Common Public
5  * License Version 1.0 (the "License"); you may not use this file
6  * except in compliance with the License. You may obtain a copy of
7  * the License at http://www.eclipse.org/legal/cpl-v10.html
8  *
9  * Software distributed under the License is distributed on an "AS
10  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
11  * implied. See the License for the specific language governing
12  * rights and limitations under the License.
13  *
14  * Alternatively, the contents of this file may be used under the terms of
15  * either of the GNU General Public License Version 2 or later (the "GPL"),
16  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
17  * in which case the provisions of the GPL or the LGPL are applicable instead
18  * of those above. If you wish to allow use of your version of this file only
19  * under the terms of either the GPL or the LGPL, and not to allow others to
20  * use your version of this file under the terms of the CPL, indicate your
21  * decision by deleting the provisions above and replace them with the notice
22  * and other provisions required by the GPL or the LGPL. If you do not delete
23  * the provisions above, a recipient may use your version of this file under
24  * the terms of any one of the CPL, the GPL or the LGPL.
25  ***** END LICENSE BLOCK *****/

26 package org.jruby.util.collections;
27
28 import java.util.*;
29
30 /**
31  * A simple set that uses weak references to ensure that its elements can be garbage collected.
32  * See WeakHashMap.
33  *
34  * @author <a HREF="http://www.cs.auckland.ac.nz/~robert/">Robert Egglestone</a>
35  */

36 public class WeakHashSet extends AbstractSet {
37     private static final Object JavaDoc MAP_VALUE = new Object JavaDoc();
38     private WeakHashMap map;
39
40     public WeakHashSet() {
41         map = new WeakHashMap();
42     }
43
44     public boolean add(Object JavaDoc o) {
45         Object JavaDoc previousValue = map.put(o, MAP_VALUE);
46         return previousValue == null;
47     }
48
49     public Iterator iterator() {
50         return map.keySet().iterator();
51     }
52
53     public int size() {
54         return map.size();
55     }
56
57     public boolean isEmpty() {
58         return map.isEmpty();
59     }
60
61     public boolean contains(Object JavaDoc o) {
62         return map.containsKey(o);
63     }
64
65     public boolean remove(Object JavaDoc o) {
66         return map.remove(o) == MAP_VALUE;
67     }
68
69     public boolean removeAll(Collection collection) {
70         return map.keySet().removeAll(collection);
71     }
72
73     public boolean retainAll(Collection collection) {
74         return map.keySet().retainAll(collection);
75     }
76
77     public void clear() {
78         map.clear();
79     }
80
81 }
82
Popular Tags