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.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectInputStream; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ObjectOutputStream; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Serializable; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * TreeSet is an implementation of SortedSet. All optional operations (adding 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and removing) are supported. The elements can be any objects which are 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * comparable to each other either using their natural order or a specified 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Comparator. 30f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 31f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.2 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 33286772eb30e454847a7000b001529fca9cb65e6dJesse Wilsonpublic class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, 34f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson Cloneable, Serializable { 35f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = -2479143000061671589L; 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 3855392539fea537abfb6581b474918f9d611fba27Jesse Wilson /** Keys are this set's elements. Values are always Boolean.TRUE */ 39286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson private transient NavigableMap<E, Object> backingMap; 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 41286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson private transient NavigableSet<E> descendingSet; 42286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 43286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson TreeSet(NavigableMap<E, Object> map) { 44286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson backingMap = map; 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new empty instance of {@code TreeSet} which uses natural 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ordering. 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TreeSet() { 5255392539fea537abfb6581b474918f9d611fba27Jesse Wilson backingMap = new TreeMap<E, Object>(); 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of {@code TreeSet} which uses natural ordering 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * and containing the unique elements in the specified collection. 58f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param collection 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the collection of elements to add. 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClassCastException 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when an element in the collection does not implement the 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Comparable interface, or the elements in the collection 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cannot be compared. 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TreeSet(Collection<? extends E> collection) { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(); 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project addAll(collection); 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new empty instance of {@code TreeSet} which uses the 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * specified comparator. 74f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param comparator 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the comparator to use. 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TreeSet(Comparator<? super E> comparator) { 7955392539fea537abfb6581b474918f9d611fba27Jesse Wilson backingMap = new TreeMap<E, Object>(comparator); 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Constructs a new instance of {@code TreeSet} containing the elements of 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the specified SortedSet and using the same Comparator. 85f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param set 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the SortedSet of elements to add. 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public TreeSet(SortedSet<E> set) { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this(set.comparator()); 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator<E> it = set.iterator(); 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (it.hasNext()) { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project add(it.next()); 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Adds the specified object to this {@code TreeSet}. 99f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to add. 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} when this {@code TreeSet} did not already contain 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object, {@code false} otherwise. 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClassCastException 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when the object cannot be compared with the elements in this 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code TreeSet}. 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when the object is null and the comparator cannot handle 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * null. 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean add(E object) { 11355392539fea537abfb6581b474918f9d611fba27Jesse Wilson return backingMap.put(object, Boolean.TRUE) == null; 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Adds the objects in the specified collection to this {@code TreeSet}. 118f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param collection 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the collection of objects to add. 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this {@code TreeSet} was modified, {@code false} 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClassCastException 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when an object in the collection cannot be compared with the 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements in this {@code TreeSet}. 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when an object in the collection is null and the comparator 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cannot handle null. 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean addAll(Collection<? extends E> collection) { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return super.addAll(collection); 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Removes all elements from this {@code TreeSet}, leaving it empty. 137f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #isEmpty 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #size 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void clear() { 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project backingMap.clear(); 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a new {@code TreeSet} with the same elements, size and comparator 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as this {@code TreeSet}. 149f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a shallow copy of this {@code TreeSet}. 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see java.lang.Cloneable 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object clone() { 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TreeSet<E> clone = (TreeSet<E>) super.clone(); 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (backingMap instanceof TreeMap) { 159286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson clone.backingMap = (NavigableMap<E, Object>) ((TreeMap<E, Object>) backingMap) 160f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson .clone(); 161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 16255392539fea537abfb6581b474918f9d611fba27Jesse Wilson clone.backingMap = new TreeMap<E, Object>(backingMap); 163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return clone; 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (CloneNotSupportedException e) { 166fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes throw new AssertionError(e); 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the comparator used to compare elements in this {@code TreeSet}. 172f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a Comparator or null if the natural ordering is used 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Comparator<? super E> comparator() { 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingMap.comparator(); 177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Searches this {@code TreeSet} for the specified object. 181f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to search for. 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if {@code object} is an element of this 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code TreeSet}, {@code false} otherwise. 186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClassCastException 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when the object cannot be compared with the elements in this 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code TreeSet}. 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when the object is null and the comparator cannot handle 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * null. 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean contains(Object object) { 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingMap.containsKey(object); 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns true if this {@code TreeSet} has no element, otherwise false. 200f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return true if this {@code TreeSet} has no element. 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #size 203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean isEmpty() { 206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingMap.isEmpty(); 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns an Iterator on the elements of this {@code TreeSet}. 211f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return an Iterator on the elements of this {@code TreeSet}. 213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Iterator 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Iterator<E> iterator() { 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingMap.keySet().iterator(); 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 221286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 222f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 223286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#descendingIterator() 224286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 226286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public Iterator<E> descendingIterator() { 227286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return descendingSet().iterator(); 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Removes an occurrence of the specified object from this {@code TreeSet}. 232f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param object 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the object to remove. 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if this {@code TreeSet} was modified, {@code false} 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherwise. 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws ClassCastException 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when the object cannot be compared with the elements in this 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code TreeSet}. 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws NullPointerException 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * when the object is null and the comparator cannot handle 242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * null. 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean remove(Object object) { 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingMap.remove(object) != null; 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the number of elements in this {@code TreeSet}. 251f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the number of elements in this {@code TreeSet}. 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int size() { 256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return backingMap.size(); 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 260eeefcae2980c8db05ec08303b5b112afce232d26Elliott Hughes * Returns the first element in this set. 26138f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes * @throws NoSuchElementException when this TreeSet is empty 262286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 263286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public E first() { 264286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return backingMap.firstKey(); 265286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 266286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 267286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 268eeefcae2980c8db05ec08303b5b112afce232d26Elliott Hughes * Returns the last element in this set. 26938f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes * @throws NoSuchElementException when this TreeSet is empty 270286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 271286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public E last() { 272286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return backingMap.lastKey(); 273286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 274286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 275286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 276286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 277286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 278286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#pollFirst() 279286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 280286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 281286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public E pollFirst() { 282286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson Map.Entry<E, Object> entry = backingMap.pollFirstEntry(); 283b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes return (entry == null) ? null : entry.getKey(); 284286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 285286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 286286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 287286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 288286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 289286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#pollLast() 290286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 291286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 292286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public E pollLast() { 293286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson Map.Entry<E, Object> entry = backingMap.pollLastEntry(); 294b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes return (entry == null) ? null : entry.getKey(); 295286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 296286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 297286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 298286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 299286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 300286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#higher(java.lang.Object) 301286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 302286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 303286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public E higher(E e) { 304286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return backingMap.higherKey(e); 305286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 306286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 307286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 308286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 309286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 310286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#lower(java.lang.Object) 311286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 312286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 313286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public E lower(E e) { 314286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return backingMap.lowerKey(e); 315286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 316286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 317286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 318286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 319286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 320286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#ceiling(java.lang.Object) 321286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 322286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 323286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public E ceiling(E e) { 324286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return backingMap.ceilingKey(e); 325286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 326286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 327286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 328286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 329286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 330286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#floor(java.lang.Object) 331286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 332286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 333286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public E floor(E e) { 334286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return backingMap.floorKey(e); 335286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 336286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 337286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 338286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 339286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 340286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#descendingSet() 341286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 342286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 343286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public NavigableSet<E> descendingSet() { 344b46dab348e2007bc08abaf7ecae34d89a2474e50Elliott Hughes return (descendingSet != null) ? descendingSet 345286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson : (descendingSet = new TreeSet<E>(backingMap.descendingMap())); 346286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 347286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 348286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 349286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 350286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 351286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#subSet(Object, boolean, Object, boolean) 352286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 355286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public NavigableSet<E> subSet(E start, boolean startInclusive, E end, 356286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson boolean endInclusive) { 357286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson Comparator<? super E> c = backingMap.comparator(); 358286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson int compare = (c == null) ? ((Comparable<E>) start).compareTo(end) : c 359286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson .compare(start, end); 360286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson if (compare <= 0) { 361286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return new TreeSet<E>(backingMap.subMap(start, startInclusive, end, 362286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson endInclusive)); 363286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 364286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson throw new IllegalArgumentException(); 365286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 366286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 367286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 368286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 369286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 370286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#headSet(Object, boolean) 371286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 372286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 373286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson @SuppressWarnings("unchecked") 374286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public NavigableSet<E> headSet(E end, boolean endInclusive) { 375286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson // Check for errors 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Comparator<? super E> c = backingMap.comparator(); 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == null) { 378286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson ((Comparable<E>) end).compareTo(end); 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 380286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson c.compare(end, end); 381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 382286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return new TreeSet<E>(backingMap.headMap(end, endInclusive)); 383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 386286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * {@inheritDoc} 387f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 388286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @see java.util.NavigableSet#tailSet(Object, boolean) 389286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @since 1.6 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 392286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public NavigableSet<E> tailSet(E start, boolean startInclusive) { 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // Check for errors 394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Comparator<? super E> c = backingMap.comparator(); 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (c == null) { 396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ((Comparable<E>) start).compareTo(start); 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project c.compare(start, start); 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 400286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return new TreeSet<E>(backingMap.tailMap(start, startInclusive)); 401286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 402286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 403286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 404eeefcae2980c8db05ec08303b5b112afce232d26Elliott Hughes * Returns a {@code SortedSet} of the specified portion of this {@code TreeSet} which 405286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * contains elements greater or equal to the start element but less than the 406286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * end element. The returned SortedSet is backed by this TreeSet so changes 407286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * to one are reflected by the other. 408286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 409286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @param start 410286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * the start element 411286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @param end 412286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * the end element 413286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @return a subset where the elements are greater or equal to 414286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * <code>start</code> and less than <code>end</code> 415286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 41638f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes * @throws ClassCastException 417286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * when the start or end object cannot be compared with the 418286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * elements in this TreeSet 41938f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes * @throws NullPointerException 420286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * when the start or end object is null and the comparator 421286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * cannot handle null 422286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 423286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson @SuppressWarnings("unchecked") 424286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public SortedSet<E> subSet(E start, E end) { 425286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return subSet(start, true, end, false); 426286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 427286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 428286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 429eeefcae2980c8db05ec08303b5b112afce232d26Elliott Hughes * Returns a {@code SortedSet} of the specified portion of this {@code TreeSet} which 430286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * contains elements less than the end element. The returned SortedSet is 431286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * backed by this TreeSet so changes to one are reflected by the other. 432286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 433286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @param end 434286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * the end element 435286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @return a subset where the elements are less than <code>end</code> 436286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 43738f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes * @throws ClassCastException 438286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * when the end object cannot be compared with the elements 439286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * in this TreeSet 44038f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes * @throws NullPointerException 441286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * when the end object is null and the comparator cannot 442286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * handle null 443286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 444286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson @SuppressWarnings("unchecked") 445286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public SortedSet<E> headSet(E end) { 446286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return headSet(end, false); 447286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 448286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson 449286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson /** 450eeefcae2980c8db05ec08303b5b112afce232d26Elliott Hughes * Returns a {@code SortedSet} of the specified portion of this {@code TreeSet} which 451286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * contains elements greater or equal to the start element. The returned 452286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * SortedSet is backed by this TreeSet so changes to one are reflected by 453286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * the other. 454286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 455286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @param start 456286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * the start element 457286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * @return a subset where the elements are greater or equal to 458286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * <code>start</code> 459286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * 46038f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes * @throws ClassCastException 461286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * when the start object cannot be compared with the elements 462286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * in this TreeSet 46338f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes * @throws NullPointerException 464286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * when the start object is null and the comparator cannot 465286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson * handle null 466286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson */ 467286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson @SuppressWarnings("unchecked") 468286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson public SortedSet<E> tailSet(E start) { 469286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson return tailSet(start, true); 470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.defaultWriteObject(); 474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.writeObject(backingMap.comparator()); 475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int size = backingMap.size(); 476adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.writeInt(size); 477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (size > 0) { 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Iterator<E> it = backingMap.keySet().iterator(); 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project while (it.hasNext()) { 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.writeObject(it.next()); 481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings("unchecked") 486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private void readObject(ObjectInputStream stream) throws IOException, 487f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson ClassNotFoundException { 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project stream.defaultReadObject(); 48955392539fea537abfb6581b474918f9d611fba27Jesse Wilson TreeMap<E, Object> map = new TreeMap<E, Object>( 49055392539fea537abfb6581b474918f9d611fba27Jesse Wilson (Comparator<? super E>) stream.readObject()); 491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int size = stream.readInt(); 492286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson if (size > 0) { 4930d4daefcf389b6433a0af481ef44a84a2546541aElliott Hughes for (int i=0; i<size; i++) { 494286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson E elem = (E)stream.readObject(); 495286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson map.put(elem, Boolean.TRUE); 496286772eb30e454847a7000b001529fca9cb65e6dJesse Wilson } 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project backingMap = map; 499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 501