01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17:
18: package java.util;
19:
20: import java.io.Serializable;
21:
22: /**
23: * LinkedHashSet is a variant on HashSet. Its entries are kept in a
24: * doubly-linked list. The iteration order is the order in which entries were
25: * inserted.
26: * <p>
27: * Null elements are allowed, and all the optional Set operations are supported.
28: * <p>
29: * Like HashSet, LinkedHashSet is not thread safe, so access by multiple threads
30: * must be synchronized by an external mechanism such as
31: * Collections.synchronizedSet.
32: *
33: * @since 1.4
34: */
35: public class LinkedHashSet<E> extends HashSet<E> implements Set<E>,
36: Cloneable, Serializable {
37:
38: private static final long serialVersionUID = -2851667679971038690L;
39:
40: /**
41: * Constructs a new empty instance of LinkedHashSet.
42: */
43: public LinkedHashSet() {
44: super (new LinkedHashMap<E, HashSet<E>>());
45: }
46:
47: /**
48: * Constructs a new instance of LinkedHashSet with the specified capacity.
49: *
50: * @param capacity
51: * the initial capacity of this HashSet
52: */
53: public LinkedHashSet(int capacity) {
54: super (new LinkedHashMap<E, HashSet<E>>(capacity));
55: }
56:
57: /**
58: * Constructs a new instance of LinkedHashSet with the specified capacity
59: * and load factor.
60: *
61: * @param capacity
62: * the initial capacity
63: * @param loadFactor
64: * the initial load factor
65: */
66: public LinkedHashSet(int capacity, float loadFactor) {
67: super (new LinkedHashMap<E, HashSet<E>>(capacity, loadFactor));
68: }
69:
70: /**
71: * Constructs a new instance of LinkedHashSet containing the unique elements
72: * in the specified collection.
73: *
74: * @param collection
75: * the collection of elements to add
76: */
77: public LinkedHashSet(Collection<? extends E> collection) {
78: super (new LinkedHashMap<E, HashSet<E>>(
79: collection.size() < 6 ? 11 : collection.size() * 2));
80: for (E e : collection) {
81: add(e);
82: }
83: }
84:
85: /* overrides method in HashMap */
86: @Override
87: HashMap<E, HashSet<E>> createBackingMap(int capacity,
88: float loadFactor) {
89: return new LinkedHashMap<E, HashSet<E>>(capacity, loadFactor);
90: }
91: }
|