19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.google.android.collect; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Collections; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.EnumSet; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashSet; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.SortedSet; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.TreeSet; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Provides static methods for creating mutable {@code Set} instances easily and 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * other static methods for working with Sets. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class Sets { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates an empty {@code HashSet} instance. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><b>Note:</b> if {@code E} is an {@link Enum} type, use {@link 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * EnumSet#noneOf} instead. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p><b>Note:</b> if you only need an <i>immutable</i> empty Set, 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * use {@link Collections#emptySet} instead. 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return a newly-created, initially-empty {@code HashSet} 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static <K> HashSet<K> newHashSet() { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new HashSet<K>(); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 47049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar /** 48049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * Creates a {@code HashSet} instance containing the given elements. 49049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * 50049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * <p><b>Note:</b> due to a bug in javac 1.5.0_06, we cannot support the 51049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * following: 52049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * 53049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * <p>{@code Set<Base> set = Sets.newHashSet(sub1, sub2);} 54049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * 55049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * <p>where {@code sub1} and {@code sub2} are references to subtypes of {@code 56049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * Base}, not of {@code Base} itself. To get around this, you must use: 57049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * 58049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * <p>{@code Set<Base> set = Sets.<Base>newHashSet(sub1, sub2);} 59049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * 60049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * @param elements the elements that the set should contain 61049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * @return a newly-created {@code HashSet} containing those elements (minus 62049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * duplicates) 63049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar */ 64049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar public static <E> HashSet<E> newHashSet(E... elements) { 65049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar int capacity = elements.length * 4 / 3 + 1; 66049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar HashSet<E> set = new HashSet<E>(capacity); 67049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar Collections.addAll(set, elements); 68049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar return set; 69049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 71049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar /** 72049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * Creates an empty {@code SortedSet} instance. 73049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * 74049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * @return a newly-created, initially-empty {@code SortedSet}. 75049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar */ 76049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar public static <E> SortedSet<E> newSortedSet() { 77049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar return new TreeSet<E>(); 78049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar } 79049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar 80049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar /** 81049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * Creates a {@code SortedSet} instance containing the given elements. 82049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * 83049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * @param elements the elements that the set should contain 84049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * @return a newly-created {@code SortedSet} containing those elements (minus 85049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar * duplicates) 86049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar */ 87049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar public static <E> SortedSet<E> newSortedSet(E... elements) { 88049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar SortedSet<E> set = new TreeSet<E>(); 89049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar Collections.addAll(set, elements); 90049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar return set; 91049070d365c41a6beb81b4936b9fcc99a9549bf9Evan Millar } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 94