AbstractMap.java revision f6c387128427e121477c1b32ad35cdcaa5101ba3
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// BEGIN android-added 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// copied from newer harmony 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Map.Entry; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project// END android-added 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This class is an abstract implementation of the {@code Map} interface. This 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * implementation does not support adding. A subclass must implement the 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * abstract method entrySet(). 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class AbstractMap<K, V> implements Map<K, V> { 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Lazily initialized key set. 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Set<K> keySet; 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Collection<V> valuesCollection; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a new instance of this {@code AbstractMap}. 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected AbstractMap() { 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes all elements from this map, leaving it empty. 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if removing from this map is not supported. 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #isEmpty() 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #size() 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project entrySet().clear(); 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether this map contains the specified key. 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key to search for. 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this map contains the specified key, 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code false} otherwise. 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsKey(Object key) { 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key != null) { 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key.equals(it.next().getKey())) { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (it.next().getKey() == null) { 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether this map contains the specified value. 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the value to search for. 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this map contains the specified value, 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code false} otherwise. 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsValue(Object value) { 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (value != null) { 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (value.equals(it.next().getValue())) { 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (it.next().getValue() == null) { 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a set containing all of the mappings in this map. Each mapping is 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * an instance of {@link Map.Entry}. As the set is backed by this map, 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * changes in one will be reflected in the other. 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a set of the mappings. 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public abstract Set<Map.Entry<K, V>> entrySet(); 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compares the specified object to this instance, and returns {@code true} 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the specified object is a map and both maps contain the same mappings. 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the object to compare with this object. 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return boolean {@code true} if the object is the same as this object, 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and {@code false} if it is different from this object. 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #hashCode() 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #entrySet() 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (this == object) { 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (object instanceof Map) { 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map<?, ?> map = (Map<?, ?>) object; 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (size() != map.size()) { 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // BEGIN android-changed 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // copied from newer version of harmony 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Entry<K, V> entry = it.next(); 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project K key = entry.getKey(); 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project V value = entry.getValue(); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object obj = map.get(key); 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if( null != obj && (!obj.equals(value)) || null == obj && obj != value) { 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // END android-changed 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the value of the mapping with the specified key. 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key. 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the mapping with the specified key, or {@code null} 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if no mapping for the specified key is found. 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V get(Object key) { 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key != null) { 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key.equals(entry.getKey())) { 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entry.getValue(); 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (entry.getKey() == null) { 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entry.getValue(); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the hash code for this object. Objects which are equal must 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * return the same value for this method. 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the hash code of this object. 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #equals(Object) 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result = 0; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result += it.next().hashCode(); 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether this map is empty. 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if this map has no elements, {@code false} 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * otherwise. 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #size() 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return size() == 0; 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a set of the keys contained in this map. The set is backed by 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this map so changes to one are reflected by the other. The returned set 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * does not support adding. 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a set of the keys. 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<K> keySet() { 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (keySet == null) { 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keySet = new AbstractSet<K>() { 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return containsKey(object); 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return AbstractMap.this.size(); 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<K> iterator() { 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator<K>() { 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> setIterator = entrySet() 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .iterator(); 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return setIterator.hasNext(); 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K next() { 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return setIterator.next().getKey(); 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setIterator.remove(); 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return keySet; 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Maps the specified key to the specified value. 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key. 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the value. 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of any previous mapping with the specified key or 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code null} if there was no mapping. 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if adding to this map is not supported. 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the class of the key or value is inappropriate for this 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * map. 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the key or value cannot be added to this map. 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws NullPointerException 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the key or value is {@code null} and this Map does not 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * support {@code null} keys or values. 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V put(K key, V value) { 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copies every mapping in the specified map to this map. 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param map 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the map to copy mappings from. 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if adding to this map is not supported. 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the class of a key or value is inappropriate for this 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * map. 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a key or value cannot be added to this map. 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws NullPointerException 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if a key or value is {@code null} and this map does not 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * support {@code null} keys or values. 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void putAll(Map<? extends K, ? extends V> map) { 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (Map.Entry<? extends K, ? extends V> entry : map.entrySet()) { 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project put(entry.getKey(), entry.getValue()); 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Removes a mapping with the specified key from this Map. 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key of the mapping to remove. 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the value of the removed mapping or {@code null} if no mapping 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * for the specified key was found. 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if removing from this map is not supported. 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V remove(Object key) { 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key != null) { 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key.equals(entry.getKey())) { 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entry.getValue(); 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (entry.getKey() == null) { 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.remove(); 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entry.getValue(); 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the number of elements in this map. 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of elements in this map. 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return entrySet().size(); 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the string representation of this map. 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the string representation of this map. 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (isEmpty()) { 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return "{}"; //$NON-NLS-1$ 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringBuilder buffer = new StringBuilder(size() * 28); 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append('{'); 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = entrySet().iterator(); 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> entry = it.next(); 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object key = entry.getKey(); 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (key != this) { 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(key); 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append("(this Map)"); //$NON-NLS-1$ 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append('='); 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object value = entry.getValue(); 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (value != this) { 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(value); 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append("(this Map)"); //$NON-NLS-1$ 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (it.hasNext()) { 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append(", "); //$NON-NLS-1$ 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project buffer.append('}'); 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return buffer.toString(); 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a collection of the values contained in this map. The collection 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is backed by this map so changes to one are reflected by the other. The 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * collection supports remove, removeAll, retainAll and clear operations, 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and it does not support add or addAll operations. 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This method returns a collection which is the subclass of 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * AbstractCollection. The iterator method of this subclass returns a 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * "wrapper object" over the iterator of map's entrySet(). The {@code size} 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method wraps the map's size method and the {@code contains} method wraps 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the map's containsValue method. 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </p> 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The collection is created when this method is called for the first time 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * and returned in response to all subsequent calls. This method may return 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * different collections when multiple concurrent calls occur to this 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * method, since no synchronization is performed. 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * </p> 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a collection of the values contained in this map. 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Collection<V> values() { 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (valuesCollection == null) { 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project valuesCollection = new AbstractCollection<V>() { 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return AbstractMap.this.size(); 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return containsValue(object); 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<V> iterator() { 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator<V>() { 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> setIterator = entrySet() 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .iterator(); 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return setIterator.hasNext(); 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V next() { 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return setIterator.next().getValue(); 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project setIterator.remove(); 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return valuesCollection; 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a new instance of the same class as this instance, whose slots 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * have been filled in with the values of the slots of this instance. 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a shallow copy of this object. 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws CloneNotSupportedException 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the receiver's class does not implement the interface 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Cloneable}. 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project protected Object clone() throws CloneNotSupportedException { 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project AbstractMap<K, V> result = (AbstractMap<K, V>) super.clone(); 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.keySet = null; 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result.valuesCollection = null; 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 477