17dd252788645e940eada959bdde927426e2531c9Paul Duffin/* 27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2008 The Guava Authors 37dd252788645e940eada959bdde927426e2531c9Paul Duffin * 47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License"); 57dd252788645e940eada959bdde927426e2531c9Paul Duffin * you may not use this file except in compliance with the License. 67dd252788645e940eada959bdde927426e2531c9Paul Duffin * You may obtain a copy of the License at 77dd252788645e940eada959bdde927426e2531c9Paul Duffin * 87dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0 97dd252788645e940eada959bdde927426e2531c9Paul Duffin * 107dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software 117dd252788645e940eada959bdde927426e2531c9Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS, 127dd252788645e940eada959bdde927426e2531c9Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137dd252788645e940eada959bdde927426e2531c9Paul Duffin * See the License for the specific language governing permissions and 147dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License. 157dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 167dd252788645e940eada959bdde927426e2531c9Paul Duffin 177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.collect; 187dd252788645e940eada959bdde927426e2531c9Paul Duffin 197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtCompatible; 207dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtIncompatible; 217dd252788645e940eada959bdde927426e2531c9Paul Duffin 227dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.io.Serializable; 237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Map.Entry; 247dd252788645e940eada959bdde927426e2531c9Paul Duffin 257dd252788645e940eada959bdde927426e2531c9Paul Duffinimport javax.annotation.Nullable; 267dd252788645e940eada959bdde927426e2531c9Paul Duffin 277dd252788645e940eada959bdde927426e2531c9Paul Duffin/** 287dd252788645e940eada959bdde927426e2531c9Paul Duffin * {@code keySet()} implementation for {@link ImmutableMap}. 297dd252788645e940eada959bdde927426e2531c9Paul Duffin * 307dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Jesse Wilson 317dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Kevin Bourrillion 327dd252788645e940eada959bdde927426e2531c9Paul Duffin */ 337dd252788645e940eada959bdde927426e2531c9Paul Duffin@GwtCompatible(emulated = true) 347dd252788645e940eada959bdde927426e2531c9Paul Duffinfinal class ImmutableMapKeySet<K, V> extends ImmutableSet<K> { 357dd252788645e940eada959bdde927426e2531c9Paul Duffin private final ImmutableMap<K, V> map; 367dd252788645e940eada959bdde927426e2531c9Paul Duffin 377dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableMapKeySet(ImmutableMap<K, V> map) { 387dd252788645e940eada959bdde927426e2531c9Paul Duffin this.map = map; 397dd252788645e940eada959bdde927426e2531c9Paul Duffin } 407dd252788645e940eada959bdde927426e2531c9Paul Duffin 410888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override 427dd252788645e940eada959bdde927426e2531c9Paul Duffin public int size() { 437dd252788645e940eada959bdde927426e2531c9Paul Duffin return map.size(); 447dd252788645e940eada959bdde927426e2531c9Paul Duffin } 457dd252788645e940eada959bdde927426e2531c9Paul Duffin 467dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 477dd252788645e940eada959bdde927426e2531c9Paul Duffin public UnmodifiableIterator<K> iterator() { 487dd252788645e940eada959bdde927426e2531c9Paul Duffin return asList().iterator(); 497dd252788645e940eada959bdde927426e2531c9Paul Duffin } 507dd252788645e940eada959bdde927426e2531c9Paul Duffin 517dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 527dd252788645e940eada959bdde927426e2531c9Paul Duffin public boolean contains(@Nullable Object object) { 537dd252788645e940eada959bdde927426e2531c9Paul Duffin return map.containsKey(object); 547dd252788645e940eada959bdde927426e2531c9Paul Duffin } 557dd252788645e940eada959bdde927426e2531c9Paul Duffin 567dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 577dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableList<K> createAsList() { 587dd252788645e940eada959bdde927426e2531c9Paul Duffin final ImmutableList<Entry<K, V>> entryList = map.entrySet().asList(); 597dd252788645e940eada959bdde927426e2531c9Paul Duffin return new ImmutableAsList<K>() { 607dd252788645e940eada959bdde927426e2531c9Paul Duffin 610888a09821a98ac0680fad765217302858e70fa4Paul Duffin @Override 627dd252788645e940eada959bdde927426e2531c9Paul Duffin public K get(int index) { 637dd252788645e940eada959bdde927426e2531c9Paul Duffin return entryList.get(index).getKey(); 647dd252788645e940eada959bdde927426e2531c9Paul Duffin } 657dd252788645e940eada959bdde927426e2531c9Paul Duffin 667dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 677dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableCollection<K> delegateCollection() { 687dd252788645e940eada959bdde927426e2531c9Paul Duffin return ImmutableMapKeySet.this; 697dd252788645e940eada959bdde927426e2531c9Paul Duffin } 707dd252788645e940eada959bdde927426e2531c9Paul Duffin 717dd252788645e940eada959bdde927426e2531c9Paul Duffin }; 727dd252788645e940eada959bdde927426e2531c9Paul Duffin } 737dd252788645e940eada959bdde927426e2531c9Paul Duffin 747dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override 757dd252788645e940eada959bdde927426e2531c9Paul Duffin boolean isPartialView() { 767dd252788645e940eada959bdde927426e2531c9Paul Duffin return true; 777dd252788645e940eada959bdde927426e2531c9Paul Duffin } 787dd252788645e940eada959bdde927426e2531c9Paul Duffin 797dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("serialization") 807dd252788645e940eada959bdde927426e2531c9Paul Duffin @Override Object writeReplace() { 817dd252788645e940eada959bdde927426e2531c9Paul Duffin return new KeySetSerializedForm<K>(map); 827dd252788645e940eada959bdde927426e2531c9Paul Duffin } 837dd252788645e940eada959bdde927426e2531c9Paul Duffin 847dd252788645e940eada959bdde927426e2531c9Paul Duffin @GwtIncompatible("serialization") 857dd252788645e940eada959bdde927426e2531c9Paul Duffin private static class KeySetSerializedForm<K> implements Serializable { 867dd252788645e940eada959bdde927426e2531c9Paul Duffin final ImmutableMap<K, ?> map; 877dd252788645e940eada959bdde927426e2531c9Paul Duffin KeySetSerializedForm(ImmutableMap<K, ?> map) { 887dd252788645e940eada959bdde927426e2531c9Paul Duffin this.map = map; 897dd252788645e940eada959bdde927426e2531c9Paul Duffin } 907dd252788645e940eada959bdde927426e2531c9Paul Duffin Object readResolve() { 917dd252788645e940eada959bdde927426e2531c9Paul Duffin return map.keySet(); 927dd252788645e940eada959bdde927426e2531c9Paul Duffin } 937dd252788645e940eada959bdde927426e2531c9Paul Duffin private static final long serialVersionUID = 0; 947dd252788645e940eada959bdde927426e2531c9Paul Duffin } 957dd252788645e940eada959bdde927426e2531c9Paul Duffin} 96