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