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