1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.util; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This class is an abstract implementation of the {@code Map} interface. This 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * implementation does not support adding. A subclass must implement the 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * abstract method entrySet(). 243819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 253819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.2 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class AbstractMap<K, V> implements Map<K, V> { 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Lazily initialized key set. 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Set<K> keySet; 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Collection<V> valuesCollection; 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new instance of this {@code AbstractMap}. 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AbstractMap() { 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes all elements from this map, leaving it empty. 433819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if removing from this map is not supported. 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #isEmpty() 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #size() 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project entrySet().clear(); 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether this map contains the specified key. 553819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key to search for. 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this map contains the specified key, 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code false} otherwise. 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsKey(Object key) { 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key != null) { 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key.equals(it.next().getKey())) { 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (it.next().getKey() == null) { 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether this map contains the specified value. 813819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the value to search for. 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this map contains the specified value, 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code false} otherwise. 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsValue(Object value) { 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (value != null) { 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (value.equals(it.next().getValue())) { 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (it.next().getValue() == null) { 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a set containing all of the mappings in this map. Each mapping is 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an instance of {@link Map.Entry}. As the set is backed by this map, 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * changes in one will be reflected in the other. 1093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a set of the mappings. 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract Set<Map.Entry<K, V>> entrySet(); 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compares the specified object to this instance, and returns {@code true} 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the specified object is a map and both maps contain the same mappings. 1173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the object to compare with this object. 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return boolean {@code true} if the object is the same as this object, 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and {@code false} if it is different from this object. 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #hashCode() 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #entrySet() 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (this == object) { 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (object instanceof Map) { 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map<?, ?> map = (Map<?, ?>) object; 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (size() != map.size()) { 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1363819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson try { 13772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson for (Entry<K, V> entry : entrySet()) { 1383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson K key = entry.getKey(); 13972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson V mine = entry.getValue(); 14072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson Object theirs = map.get(key); 14172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson if (mine == null) { 14272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson if (theirs != null || !map.containsKey(key)) { 14372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return false; 14472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 14572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } else if (!mine.equals(theirs)) { 1463819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return false; 1473819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 14972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } catch (NullPointerException ignored) { 15072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return false; 15172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } catch (ClassCastException ignored) { 1523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return false; 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the value of the mapping with the specified key. 1613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key. 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the mapping with the specified key, or {@code null} 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no mapping for the specified key is found. 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V get(Object key) { 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key != null) { 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key.equals(entry.getKey())) { 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entry.getValue(); 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (entry.getKey() == null) { 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entry.getValue(); 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the hash code for this object. Objects which are equal must 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the same value for this method. 1903819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the hash code of this object. 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #equals(Object) 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result = 0; 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result += it.next().hashCode(); 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether this map is empty. 2063819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this map has no elements, {@code false} 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #size() 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return size() == 0; 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a set of the keys contained in this map. The set is backed by 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this map so changes to one are reflected by the other. The returned set 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * does not support adding. 2193819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a set of the keys. 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<K> keySet() { 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (keySet == null) { 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keySet = new AbstractSet<K>() { 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return containsKey(object); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return AbstractMap.this.size(); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<K> iterator() { 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator<K>() { 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> setIterator = entrySet() 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .iterator(); 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return setIterator.hasNext(); 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K next() { 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return setIterator.next().getKey(); 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setIterator.remove(); 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return keySet; 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Maps the specified key to the specified value. 2613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key. 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the value. 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of any previous mapping with the specified key or 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code null} if there was no mapping. 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if adding to this map is not supported. 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the class of the key or value is inappropriate for this 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * map. 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the key or value cannot be added to this map. 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws NullPointerException 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the key or value is {@code null} and this Map does not 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * support {@code null} keys or values. 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V put(K key, V value) { 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copies every mapping in the specified map to this map. 2853819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param map 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the map to copy mappings from. 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if adding to this map is not supported. 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the class of a key or value is inappropriate for this 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * map. 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a key or value cannot be added to this map. 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws NullPointerException 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a key or value is {@code null} and this map does not 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * support {@code null} keys or values. 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void putAll(Map<? extends K, ? extends V> map) { 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) { 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project put(entry.getKey(), entry.getValue()); 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes a mapping with the specified key from this Map. 3073819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key of the mapping to remove. 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the removed mapping or {@code null} if no mapping 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for the specified key was found. 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if removing from this map is not supported. 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V remove(Object key) { 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key != null) { 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key.equals(entry.getKey())) { 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entry.getValue(); 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (entry.getKey() == null) { 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entry.getValue(); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the number of elements in this map. 3393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of elements in this map. 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entrySet().size(); 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the string representation of this map. 3483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the string representation of this map. 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (isEmpty()) { 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return "{}"; //$NON-NLS-1$ 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuilder buffer = new StringBuilder(size() * 28); 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append('{'); 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object key = entry.getKey(); 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key != this) { 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(key); 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append("(this Map)"); //$NON-NLS-1$ 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append('='); 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object value = entry.getValue(); 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (value != this) { 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(value); 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append("(this Map)"); //$NON-NLS-1$ 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (it.hasNext()) { 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(", "); //$NON-NLS-1$ 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append('}'); 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buffer.toString(); 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a collection of the values contained in this map. The collection 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is backed by this map so changes to one are reflected by the other. The 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * collection supports remove, removeAll, retainAll and clear operations, 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and it does not support add or addAll operations. 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This method returns a collection which is the subclass of 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * AbstractCollection. The iterator method of this subclass returns a 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "wrapper object" over the iterator of map's entrySet(). The {@code size} 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method wraps the map's size method and the {@code contains} method wraps 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the map's containsValue method. 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The collection is created when this method is called for the first time 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and returned in response to all subsequent calls. This method may return 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * different collections when multiple concurrent calls occur to this 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method, since no synchronization is performed. 3993819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a collection of the values contained in this map. 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Collection<V> values() { 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (valuesCollection == null) { 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project valuesCollection = new AbstractCollection<V>() { 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return AbstractMap.this.size(); 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return containsValue(object); 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<V> iterator() { 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator<V>() { 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> setIterator = entrySet() 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .iterator(); 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return setIterator.hasNext(); 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V next() { 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return setIterator.next().getValue(); 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setIterator.remove(); 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return valuesCollection; 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a new instance of the same class as this instance, whose slots 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have been filled in with the values of the slots of this instance. 4423819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a shallow copy of this object. 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws CloneNotSupportedException 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the receiver's class does not implement the interface 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Cloneable}. 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected Object clone() throws CloneNotSupportedException { 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap<K, V> result = (AbstractMap<K, V>) super.clone(); 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.keySet = null; 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.valuesCollection = null; 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 457