Source Code Cross Referenced for HashSet.java in  » 6.0-JDK-Core » Collections-Jar-Zip-Logging-regex » java » util » Java Source Code / Java DocumentationJava Source Code and Java Documentation

Java Source Code / Java Documentation
1. 6.0 JDK Core
2. 6.0 JDK Modules
3. 6.0 JDK Modules com.sun
4. 6.0 JDK Modules com.sun.java
5. 6.0 JDK Modules sun
6. 6.0 JDK Platform
7. Ajax
8. Apache Harmony Java SE
9. Aspect oriented
10. Authentication Authorization
11. Blogger System
12. Build
13. Byte Code
14. Cache
15. Chart
16. Chat
17. Code Analyzer
18. Collaboration
19. Content Management System
20. Database Client
21. Database DBMS
22. Database JDBC Connection Pool
23. Database ORM
24. Development
25. EJB Server geronimo
26. EJB Server GlassFish
27. EJB Server JBoss 4.2.1
28. EJB Server resin 3.1.5
29. ERP CRM Financial
30. ESB
31. Forum
32. GIS
33. Graphic Library
34. Groupware
35. HTML Parser
36. IDE
37. IDE Eclipse
38. IDE Netbeans
39. Installer
40. Internationalization Localization
41. Inversion of Control
42. Issue Tracking
43. J2EE
44. JBoss
45. JMS
46. JMX
47. Library
48. Mail Clients
49. Net
50. Parser
51. PDF
52. Portal
53. Profiler
54. Project Management
55. Report
56. RSS RDF
57. Rule Engine
58. Science
59. Scripting
60. Search Engine
61. Security
62. Sevlet Container
63. Source Control
64. Swing Library
65. Template Engine
66. Test Coverage
67. Testing
68. UML
69. Web Crawler
70. Web Framework
71. Web Mail
72. Web Server
73. Web Services
74. Web Services apache cxf 2.0.1
75. Web Services AXIS2
76. Wiki Engine
77. Workflow Engines
78. XML
79. XML UI
Java
Java Tutorial
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java Source Code / Java Documentation » 6.0 JDK Core » Collections Jar Zip Logging regex » java.util 
Source Cross Referenced  Class Diagram Java Document (Java Doc) 


001:        /*
002:         * Copyright 1997-2006 Sun Microsystems, Inc.  All Rights Reserved.
003:         * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004:         *
005:         * This code is free software; you can redistribute it and/or modify it
006:         * under the terms of the GNU General Public License version 2 only, as
007:         * published by the Free Software Foundation.  Sun designates this
008:         * particular file as subject to the "Classpath" exception as provided
009:         * by Sun in the LICENSE file that accompanied this code.
010:         *
011:         * This code is distributed in the hope that it will be useful, but WITHOUT
012:         * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013:         * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
014:         * version 2 for more details (a copy is included in the LICENSE file that
015:         * accompanied this code).
016:         *
017:         * You should have received a copy of the GNU General Public License version
018:         * 2 along with this work; if not, write to the Free Software Foundation,
019:         * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020:         *
021:         * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022:         * CA 95054 USA or visit www.sun.com if you need additional information or
023:         * have any questions.
024:         */
025:
026:        package java.util;
027:
028:        /**
029:         * This class implements the <tt>Set</tt> interface, backed by a hash table
030:         * (actually a <tt>HashMap</tt> instance).  It makes no guarantees as to the
031:         * iteration order of the set; in particular, it does not guarantee that the
032:         * order will remain constant over time.  This class permits the <tt>null</tt>
033:         * element.
034:         *
035:         * <p>This class offers constant time performance for the basic operations
036:         * (<tt>add</tt>, <tt>remove</tt>, <tt>contains</tt> and <tt>size</tt>),
037:         * assuming the hash function disperses the elements properly among the
038:         * buckets.  Iterating over this set requires time proportional to the sum of
039:         * the <tt>HashSet</tt> instance's size (the number of elements) plus the
040:         * "capacity" of the backing <tt>HashMap</tt> instance (the number of
041:         * buckets).  Thus, it's very important not to set the initial capacity too
042:         * high (or the load factor too low) if iteration performance is important.
043:         *
044:         * <p><strong>Note that this implementation is not synchronized.</strong>
045:         * If multiple threads access a hash set concurrently, and at least one of
046:         * the threads modifies the set, it <i>must</i> be synchronized externally.
047:         * This is typically accomplished by synchronizing on some object that
048:         * naturally encapsulates the set.
049:         *
050:         * If no such object exists, the set should be "wrapped" using the
051:         * {@link Collections#synchronizedSet Collections.synchronizedSet}
052:         * method.  This is best done at creation time, to prevent accidental
053:         * unsynchronized access to the set:<pre>
054:         *   Set s = Collections.synchronizedSet(new HashSet(...));</pre>
055:         *
056:         * <p>The iterators returned by this class's <tt>iterator</tt> method are
057:         * <i>fail-fast</i>: if the set is modified at any time after the iterator is
058:         * created, in any way except through the iterator's own <tt>remove</tt>
059:         * method, the Iterator throws a {@link ConcurrentModificationException}.
060:         * Thus, in the face of concurrent modification, the iterator fails quickly
061:         * and cleanly, rather than risking arbitrary, non-deterministic behavior at
062:         * an undetermined time in the future.
063:         *
064:         * <p>Note that the fail-fast behavior of an iterator cannot be guaranteed
065:         * as it is, generally speaking, impossible to make any hard guarantees in the
066:         * presence of unsynchronized concurrent modification.  Fail-fast iterators
067:         * throw <tt>ConcurrentModificationException</tt> on a best-effort basis.
068:         * Therefore, it would be wrong to write a program that depended on this
069:         * exception for its correctness: <i>the fail-fast behavior of iterators
070:         * should be used only to detect bugs.</i>
071:         *
072:         * <p>This class is a member of the
073:         * <a href="{@docRoot}/../technotes/guides/collections/index.html">
074:         * Java Collections Framework</a>.
075:         *
076:         * @param <E> the type of elements maintained by this set
077:         *
078:         * @author  Josh Bloch
079:         * @author  Neal Gafter
080:         * @version 1.43, 05/05/07
081:         * @see	    Collection
082:         * @see	    Set
083:         * @see	    TreeSet
084:         * @see	    HashMap
085:         * @since   1.2
086:         */
087:
088:        public class HashSet<E> extends AbstractSet<E> implements  Set<E>,
089:                Cloneable, java.io.Serializable {
090:            static final long serialVersionUID = -5024744406713321676L;
091:
092:            private transient HashMap<E, Object> map;
093:
094:            // Dummy value to associate with an Object in the backing Map
095:            private static final Object PRESENT = new Object();
096:
097:            /**
098:             * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
099:             * default initial capacity (16) and load factor (0.75).
100:             */
101:            public HashSet() {
102:                map = new HashMap<E, Object>();
103:            }
104:
105:            /**
106:             * Constructs a new set containing the elements in the specified
107:             * collection.  The <tt>HashMap</tt> is created with default load factor
108:             * (0.75) and an initial capacity sufficient to contain the elements in
109:             * the specified collection.
110:             *
111:             * @param c the collection whose elements are to be placed into this set
112:             * @throws NullPointerException if the specified collection is null
113:             */
114:            public HashSet(Collection<? extends E> c) {
115:                map = new HashMap<E, Object>(Math.max(
116:                        (int) (c.size() / .75f) + 1, 16));
117:                addAll(c);
118:            }
119:
120:            /**
121:             * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
122:             * the specified initial capacity and the specified load factor.
123:             *
124:             * @param      initialCapacity   the initial capacity of the hash map
125:             * @param      loadFactor        the load factor of the hash map
126:             * @throws     IllegalArgumentException if the initial capacity is less
127:             *             than zero, or if the load factor is nonpositive
128:             */
129:            public HashSet(int initialCapacity, float loadFactor) {
130:                map = new HashMap<E, Object>(initialCapacity, loadFactor);
131:            }
132:
133:            /**
134:             * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has
135:             * the specified initial capacity and default load factor (0.75).
136:             *
137:             * @param      initialCapacity   the initial capacity of the hash table
138:             * @throws     IllegalArgumentException if the initial capacity is less
139:             *             than zero
140:             */
141:            public HashSet(int initialCapacity) {
142:                map = new HashMap<E, Object>(initialCapacity);
143:            }
144:
145:            /**
146:             * Constructs a new, empty linked hash set.  (This package private
147:             * constructor is only used by LinkedHashSet.) The backing
148:             * HashMap instance is a LinkedHashMap with the specified initial
149:             * capacity and the specified load factor.
150:             *
151:             * @param      initialCapacity   the initial capacity of the hash map
152:             * @param      loadFactor        the load factor of the hash map
153:             * @param      dummy             ignored (distinguishes this
154:             *             constructor from other int, float constructor.)
155:             * @throws     IllegalArgumentException if the initial capacity is less
156:             *             than zero, or if the load factor is nonpositive
157:             */
158:            HashSet(int initialCapacity, float loadFactor, boolean dummy) {
159:                map = new LinkedHashMap<E, Object>(initialCapacity, loadFactor);
160:            }
161:
162:            /**
163:             * Returns an iterator over the elements in this set.  The elements
164:             * are returned in no particular order.
165:             *
166:             * @return an Iterator over the elements in this set
167:             * @see ConcurrentModificationException
168:             */
169:            public Iterator<E> iterator() {
170:                return map.keySet().iterator();
171:            }
172:
173:            /**
174:             * Returns the number of elements in this set (its cardinality).
175:             *
176:             * @return the number of elements in this set (its cardinality)
177:             */
178:            public int size() {
179:                return map.size();
180:            }
181:
182:            /**
183:             * Returns <tt>true</tt> if this set contains no elements.
184:             *
185:             * @return <tt>true</tt> if this set contains no elements
186:             */
187:            public boolean isEmpty() {
188:                return map.isEmpty();
189:            }
190:
191:            /**
192:             * Returns <tt>true</tt> if this set contains the specified element.
193:             * More formally, returns <tt>true</tt> if and only if this set
194:             * contains an element <tt>e</tt> such that
195:             * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
196:             *
197:             * @param o element whose presence in this set is to be tested
198:             * @return <tt>true</tt> if this set contains the specified element
199:             */
200:            public boolean contains(Object o) {
201:                return map.containsKey(o);
202:            }
203:
204:            /**
205:             * Adds the specified element to this set if it is not already present.
206:             * More formally, adds the specified element <tt>e</tt> to this set if
207:             * this set contains no element <tt>e2</tt> such that
208:             * <tt>(e==null&nbsp;?&nbsp;e2==null&nbsp;:&nbsp;e.equals(e2))</tt>.
209:             * If this set already contains the element, the call leaves the set
210:             * unchanged and returns <tt>false</tt>.
211:             *
212:             * @param e element to be added to this set
213:             * @return <tt>true</tt> if this set did not already contain the specified
214:             * element
215:             */
216:            public boolean add(E e) {
217:                return map.put(e, PRESENT) == null;
218:            }
219:
220:            /**
221:             * Removes the specified element from this set if it is present.
222:             * More formally, removes an element <tt>e</tt> such that
223:             * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>,
224:             * if this set contains such an element.  Returns <tt>true</tt> if
225:             * this set contained the element (or equivalently, if this set
226:             * changed as a result of the call).  (This set will not contain the
227:             * element once the call returns.)
228:             *
229:             * @param o object to be removed from this set, if present
230:             * @return <tt>true</tt> if the set contained the specified element
231:             */
232:            public boolean remove(Object o) {
233:                return map.remove(o) == PRESENT;
234:            }
235:
236:            /**
237:             * Removes all of the elements from this set.
238:             * The set will be empty after this call returns.
239:             */
240:            public void clear() {
241:                map.clear();
242:            }
243:
244:            /**
245:             * Returns a shallow copy of this <tt>HashSet</tt> instance: the elements
246:             * themselves are not cloned.
247:             *
248:             * @return a shallow copy of this set
249:             */
250:            public Object clone() {
251:                try {
252:                    HashSet<E> newSet = (HashSet<E>) super .clone();
253:                    newSet.map = (HashMap<E, Object>) map.clone();
254:                    return newSet;
255:                } catch (CloneNotSupportedException e) {
256:                    throw new InternalError();
257:                }
258:            }
259:
260:            /**
261:             * Save the state of this <tt>HashSet</tt> instance to a stream (that is,
262:             * serialize it).
263:             *
264:             * @serialData The capacity of the backing <tt>HashMap</tt> instance
265:             *		   (int), and its load factor (float) are emitted, followed by
266:             *		   the size of the set (the number of elements it contains)
267:             *		   (int), followed by all of its elements (each an Object) in
268:             *             no particular order.
269:             */
270:            private void writeObject(java.io.ObjectOutputStream s)
271:                    throws java.io.IOException {
272:                // Write out any hidden serialization magic
273:                s.defaultWriteObject();
274:
275:                // Write out HashMap capacity and load factor
276:                s.writeInt(map.capacity());
277:                s.writeFloat(map.loadFactor());
278:
279:                // Write out size
280:                s.writeInt(map.size());
281:
282:                // Write out all elements in the proper order.
283:                for (Iterator i = map.keySet().iterator(); i.hasNext();)
284:                    s.writeObject(i.next());
285:            }
286:
287:            /**
288:             * Reconstitute the <tt>HashSet</tt> instance from a stream (that is,
289:             * deserialize it).
290:             */
291:            private void readObject(java.io.ObjectInputStream s)
292:                    throws java.io.IOException, ClassNotFoundException {
293:                // Read in any hidden serialization magic
294:                s.defaultReadObject();
295:
296:                // Read in HashMap capacity and load factor and create backing HashMap
297:                int capacity = s.readInt();
298:                float loadFactor = s.readFloat();
299:                map = (((HashSet) this ) instanceof  LinkedHashSet ? new LinkedHashMap<E, Object>(
300:                        capacity, loadFactor)
301:                        : new HashMap<E, Object>(capacity, loadFactor));
302:
303:                // Read in size
304:                int size = s.readInt();
305:
306:                // Read in all elements in the proper order.
307:                for (int i = 0; i < size; i++) {
308:                    E e = (E) s.readObject();
309:                    map.put(e, PRESENT);
310:                }
311:            }
312:        }
w__w__w_._j__a__va___2_s.c__o__m | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.